保存多个参数在一个循环,轨道控制器



我创建了一个大约有40个字段可供编辑的表单,我试图使用控制器将它们保存到数据库。我现在有这个代码:

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.

假设您正在尝试根据传入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/

我不知道你想做什么,但你的代码似乎很奇怪。解决方案如下

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

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

注意,我猜[:form]部分在第二行,这取决于你的形式。检查你的HTML源代码,看看你的字段是否像这样:

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

如您所见,name包含一个"类似数组"的形式。检查你的HTML源代码并调整(所以如果是name="foo[field_name]",你需要使用c.update_attributes(params[:foo]))

相关内容

  • 没有找到相关文章

最新更新