2012-09-09 111 views
0

我試圖將所有值設置爲0,但第三行(send(x))給我帶來了問題。看起來對我來說很合適,但不起作用。 x是Power中列車的名稱和名稱。有小費嗎?Ruby每個循環變量替換

<% @cars.each do |x| %> 
    <% @power = Power.find_by_user_id(@user) %> 
    <% @power.send(x) = 0 %> 
    <% @power.save %> 
<% end %> 
+0

究竟什麼是汽車的價值? – weexpectedTHIS

+0

你是什麼意思「所有的價值」?此外,這應該*絕對*不在視圖中(假設這是類似Rails的)。 –

+0

說@cars數組包含c01 c02 c03等,這些是列的名字 –

回答

2

假設@cars包含Power列名,就需要send setter方法(即與在=的端部)。您還需要確保您將符號傳遞給send

@cars.each do |x| 
    @power = Power.find_by_user_id(@user) 
    @power.send(:"#{x}=", 0) 
    @power.save 
end 

還有沒有爲什麼你需要設置或保存@power在循環的顯而易見的原因,所以它可能是更好的:

@power = Power.find_by_user_id(@user) 
@cars.each do |x| 
    @power.send(:"#{x}=", 0) 
end 
@power.save 
+0

訪問動態屬性名稱的唯一方法是嗎? 'ActiveRecord'類是否有像'@ power.get_attribute_by_name(x)'這樣的方法? – galymzhan

+0

@galymzhan有'write_attribute',但會繞過模型中的任何自定義寫入器。 –

+0

謝謝安德魯,我將把大部分內容移到控制器上 –