0

可能一直在研究这个太长、草率的设计,或者两者兼而有之。我的问题是我有一个想要初始化的模型。该对象有 52 个属性,但我只是根据我刚刚扫描的对象设置了大约 25 个属性。当我扫描一个对象时,我会得到这些列并将它们与我创建的 hash_map 匹配。

示例哈希映射

这只是将扫描的文本与其各自的属性名称匹配。

hash_map = {"Pizza."=>"pizza_pie","PastaBowl"=>"pasta_bowl","tacos"=>"hard_shell_taco","IceCream"=>"ice_cream","PopTarts"=>"pop_tart"}

我想做的事

menu = RestaurantMenu.new(pizza_pie => var1, pasta_bowl => var2, ...)

我唯一的问题是我的代码目前我有这个......

t.rows.each do |r|
  for i in 0..r.length-1
     #hash_map[t.combined_columns[i]] => r.[i]
     puts "#{hash_map["#{t.combined_columns[i]}"]} => #{r[i]}"
  end
end

puts行显示我想要的,但不确定如何在我的应用程序中正确获取它。

4

2 回答 2

0

我最终做了以下方法:

attributes = Hash[]
attributes["restaurant"] = tmp_basic_info.name
attributes["menu_item"] = tmp_basic_info.item_name

t.rows.each do |r|
  for i in 0..r.length-1
     attributes["other"] = t.other_information
     attributes[hash_map[t.combined_columns[i]] = r[i]
  end
  row = ImportMenuItem.new(attributes)
  row.save
end
于 2013-07-07T18:20:41.993 回答
0

以下是解决此问题的几种方法:

hash_map = {"Pizza."=>"pizza_pie","PastaBowl"=>"pasta_bowl","tacos"=>"hard_shell_taco","IceCream"=>"ice_cream","PopTarts"=>"pop_tart"}

attributes.each do |attribute, element|
  message.send((attribute + '=').to_sym, hash_map[element])
end

或像这样:

class Example
  attr_reader :Pizza, :PastaBowl #...

  def initialize args
    args.each do |k, v|
      instance_variable_set("@#{k}", v) unless v.nil?
    end
  end
end

更多详情请点击这里

于 2013-07-07T06:12:01.357 回答