哈希,键和参数

时间:2016-01-19 19:43:58

标签: ruby-on-rails arrays ruby hash

我希望代码从cart api中提取信息并将其存储在带有简单键的哈希中,然后迭代哈希以根据需要为每个项目创建新的html元素。我需要提取的每件商品都包含以下内容:idNamePrice

products.each do |product|
  @product_card = [
      {
          :id => "#{product['product_id']}",
          :name => "#{product['name']}",
          :price => "#{product['price']}"
      }
  ]

我想将信息存储在哈希中,以便我可以像这样迭代信息:

<% @product_card.each do |Need help here, Need help here| %>
<html p><% :id %></html p>
<html p><% :name %></html p>
<html p><% :price %></html p>

我对您提供的任何反馈都抱有希望。

2 个答案:

答案 0 :(得分:0)

如果您执行类似

的操作
@product_card = {}
products.each do |product|
  @product_card[product['name']] = client.call('call' ,session_id ,"product.info#{product['id']}")
end

然后在最后@product_card是散列,其中键是名称,值是这个api返回的任何值,显然是哈希值,所以当你这样做时

<% @product_card.each do |key, data | %>

key将是api的名称和data返回值(这些是任意名称)。假设api确实返回了你想要的哈希

<%= data['price'] %>

等等,在每个循环内部

答案 1 :(得分:0)

我建议使用Struct。增加一些开销,但让你的意图清晰。

ProductCard = Struct.new(:id, :name, :price)

@product_cards = products.map do |product|
  ProductCard.new("#{product['product_id']}", "#{product['name']}", "#{product['price']}")
end

这会为您提供一个ProductCards数组,您可以迭代并调用.id.name.price

替代使用OpenStruct,不需要声明ProductCard常量:

@product_cards = products.map do |product|
  OpenStruct.new(id: "#{product['product_id']}", name: "#{product['name']}", price: "#{product['price']}")
end