2015-10-07 77 views
0

enter image description hereRuby on Rails的:迭代語法錯誤

我試圖讓這個循環在cardtype結束迭代數。我無法弄清楚正確的語法。我嘗試了一堆不同的東西。

請參閱紅色箭頭。

+4

一個很好的提示,可以幫助他人在將來幫助您,將您的代碼粘貼到問題和錯誤消息中。 – gernberg

+4

以字符形式發佈代碼,而不是圖片。 – sawa

+0

感謝您的意見 –

回答

3

如果你真的做這樣你可以使用的方法來發送,以這樣的方式

if @order.send("cardtype#{n}") != "none" 

這將執行法「cardtype#{N}」的@order對象。

但是,這通常不是最好的想法,我建議你考慮將此屬性轉換爲has_many關係或可序列化數組。

退房協會是如何工作的本教程(這是最有可能要使用什麼):(?數據庫列)http://guides.rubyonrails.org/association_basics.html

+1

同意!你也可以迭代''1..9]。每個都做'而不是@數字,但是最好的辦法是製作一個單獨的卡片模型,紙張的重量,類型和數量作爲字段在卡片上,然後只是'@ order.cards.each do | card | ' - 看起來你正在學習鐵軌,祝你好運! – court3nay

+0

我認爲截至目前我的理解是有缺陷的。我是新來的鐵軌,現在我只是想讓這個代碼給我發電子郵件的細節。現在該信息來自用戶提交的表單,用戶最多可以有9張卡片。他們只能選擇1張卡,如果他們想,我只想。在電子郵件中,我不想顯示所有信息,所以我正在嘗試使用此設置。後來一旦我瞭解更多,我想添加更多的用戶有許多卡類型設置的發燒友結構。 –

+0

感謝[1..9]技巧。 –

1

據我瞭解,cardtypeN是一種方法,其中N是一個整數。這意味着沒有簡單的方法來遍歷這些屬性爲Ruby虛擬機本身這些方法都沒有聯繫,即使你給他們打電話cardtype1cardtype2對方,等

而事實上,你的代碼突出顯示了非常糟糕的設計決定給我。如果一個訂單可以有更多的卡片類型,那麼您應該確實需要一個卡片模型,並將訂單和卡片與一對多關係相關聯。

然而,要回答你的問題,你可以動態地組合使用下列方法之一方法:

# [] syntax 
@order["cardtype#{n}"] 
# send 
@order.send("cardtype#{n}") 

每種方法都有自己的優點和缺點。說到這裏,你可以循環從1到最大cardtypes

<% 1.to(10).each do |index| %> 
    <% if @order["cardtype#{index}"] != "none" %> 
    whatever 
    <% end %> 
<% end %> 

的數量然而,正如我所說,你真的想重新設計你的模型。

+1

'[]'符號確實讀得好多了。值得注意的是,您對糟糕的設計決策的評論來源於違反軟件設計的[Zero,One或Infinity Rule](https://en.wikipedia.org/wiki/Zero_one_infinity_rule)。這似乎是'has_many'關係的一個很好的候選人,而不是一堆列。 – tadman

+0

@tadman我同意'has_many',這就是爲什麼我強調它。我真的覺得擁有索引值的方法名是一種可怕的方法。 –

+0

感謝有關零無限規則的信息。我會研究has_many。我認爲我的理解還沒有完成,我一直在黑客攻擊。 –