你可以使用变量来引用Rails中的表列吗?

时间:2011-04-14 03:28:13

标签: ruby-on-rails object

假设我有一张桌子正在尝试转换。它的列名为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,它不存在。

我在各种项目中遇到过几次这个问题,有什么想法吗?

3 个答案:

答案 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