2013-03-22 53 views
-1

我創建了一個包含大約40個可用於編輯的字段的表單,我試圖用控制器將它們保存到數據庫中。目前,我有這樣的代碼:在一個循環中保存多個參數,rails控制器

c = Form.find(params[:id]) 
    if c 
    params.each do |k,v| 
    c.k = params[:v] 
    end 

不工作,我得到這個錯誤:undefined method 'k='

,如果我要他們全部手工寫出來就應該是這樣的:

c = Form.find(params[:id]) 
if c 
    c.title = params[:title] 
    c.reference = params[:reference] 
.... 
etc. 
+0

嘗試c.send(K)=參數[:V] – Rubyman 2013-03-22 12:26:38

+0

@Rubyman將無法工作的方式,你覺得 – 2013-03-22 12:37:30

回答

1

假設你想基於什麼被傳遞到params,試試這個作爲一個基本的輪廓上的Form記錄更新的屬性:

c = Form.find_by_id(params[:id]) 
if c 
    params.each do |k, v| 
     c[k] = v 
    end 

    c.save! 
end 

你的原碼的使用params[:v]可能沒有達到你想要的效果,而你真的想要的是params[:k]。但是實際上沒有必要在循環內查找該鍵的值,因爲您已經在v中掌握了該值。

下面是與ActiveRecord屬性交互的方式簡要介紹:http://www.davidverhasselt.com/2011/06/28/5-ways-to-set-attributes-in-activerecord/

0

我不知道你在嘗試待辦事項,但你的代碼似乎很奇怪。解決辦法是遵循

c.send "#{k}=", params[:v] 
+0

我已經更新了我的問題,因爲我不確定我是否正確解釋了它 – user1738017 2013-03-22 12:38:25

0

什麼

c = Form.find(params[:id]) 
c.update_attributes(params[:form]) 

注意,我在第二行猜到[:form]部分,它取決於你的形式。檢查你的HTML源代碼,看看你的領域是這樣的:

<input name="form[field_name]" ... 

正如你看到的,名稱中包含「陣列」的形態。檢查你的HTML源代碼和適應(所以如果name="foo[field_name]",你需要使用c.update_attributes(params[:foo])

相關問題