假设我有一张桌子正在尝试转换。它的列名为Item1,Item2 ... Item25。我无法控制列名,我正在将其转换为更好的结构。
因为命名约定有一种模式,我可以动态创建列名。问题是当我尝试将我的变量用作对象键时,它将作为文字而不是变量的内容传递。
例如,这有效:
if !order.item1.empty?
OrderItem.create(
:item => order.item1,
:quantity => order.qty1,
:price => order.price1
)
但是,我不想手工制作25种变体,而是想做一些像
这样的事情i = 1
while i < 25
item_ref = "item" + i.to_s
if !order.item_ref.empty?
OrderItem.create(
:item => order.item_ref,
etc...)
i += 1
end
end
但当然这不起作用。 Rails尝试查找order.item_ref而不是order.item1,它不存在。
我在各种项目中遇到过几次这个问题,有什么想法吗?
答案 0 :(得分:3)
order.send item_ref
;另外,使用25.times do |i|
(从0开始)或(1..25).each do |i|
而不是您自己的循环。
答案 1 :(得分:1)
我真的不鼓励你使用这种设计但是..无论如何......你可以使用send()
方法做你正在尝试的事情。与在order.send("item + i.to_s")
...
答案 2 :(得分:0)
试试这个 它适用于我的情况
i = 1
while i < 25
item_ref = "item" + i.to_s
unless order[item_ref].empty?
OrderItem.create :item => order.item_ref,:blah blah ...
i += 1
end
end