2011-04-14 47 views
1

比方說,我有一張表,我試圖轉換。它有列名稱Item1,Item2 ... Item25。我沒有對列名稱的控制權,我正在將其轉換爲更好的結構。你可以使用變量來引用Rails中的表格列嗎?

因爲命名約定有一個模式,所以我可以即時創建列名。問題是,當我嘗試將我的變量用作對象鍵時,它將作爲文字而不是變量的內容傳遞。

舉例來說,這個工程:

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

order.send item_ref;此外,使用25.times do |i|(從0開始)或(1..25).each do |i|而不是您自己的循環。

+0

這是完美的,謝謝你。並感謝關於更好的循環習慣的提示! – James 2011-04-14 16:27:42

1

我真的不會鼓勵你使用這種設計,但..無論如何..你可以做你正在嘗試使用send()方法。作爲order.send("item + i.to_s") ...

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 
相關問題