Ruby从数组中检索

时间:2016-06-27 14:06:58

标签: ruby-on-rails arrays ruby hash

所以我得到像这样的哈希数组

[1, {"item_name"=>"Estella Top", "item_number"=>"73", "quantity"=>"1", "option_name1_"=>"UK - 4, White"}]

[2, {"item_name"=>"Test Top", "item_number"=>"74", "quantity"=>"1", "option_name1_"=>"UK - 4, Red"}]

我有这个创建动作:

def create
f_turn = extract_items

Page.create!(line_item_id: "#{f_turn.fetch("item_number")}",
 option_name: "#{f_turn.fetch("option_name1_")}", quantity: "#{f_turn.fetch("quantity")}")
 render nothing: true
end

提取项是一个提取数组的函数。

我需要这些价值观,但出于某种原因,它不起作用。

我也试过了:

def create
f_turn = extract_items

f_turn.each do |key, values|

Page.create!(line_item_id: ["item_number"],
 option_name: ["option_name1_"], quantity: "["quantity"])
 render nothing: true
end

它们都不起作用。使用后者,而不是实际值,我得到"[\"item_number\"]"作为值。 任何帮助,将不胜感激!提前谢谢!

更新代码中的错误

def extract_items
  mod_params = Hash.new{|k, v| k[v] = {} }

  ITEM_PARAM_PREFIXES.each do |item_data_key|
      key_tracker = 1
      loop do
          current_key = (item_data_key + key_tracker.to_s).to_sym
          if params.include? current_key
              mod_params[key_tracker][item_data_key] = params[current_key]
          else
              break
          end
          key_tracker += 1
      end
  end
  mod_params
end

1 个答案:

答案 0 :(得分:0)

如果您的哈希采用您发布的格式,则应该有效:

def create
  f_turn = extract_items

  f_turn.each do |key, values|
    Page.create!(line_item_id: values["item_number"],
      option_name: values["option_name1_"], quantity: values["quantity"])
      render nothing: true
    end
  end
end

您无法通过原始代码的外观访问哈希值。