可能一直在研究这个太长,邋design的设计,或两者兼而有之。我的问题是我有一个我希望初始化的模型。该对象具有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
行显示我想要的内容,但不确定如何在我的应用中正确显示。
答案 0 :(得分: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
了解更多详情click here
答案 1 :(得分: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