2013-03-22 55 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])

相关问题