-1

我创建了一个包含大约 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.
4

3 回答 3

1

假设您正在尝试Form根据传入的内容更新记录上的属性,请params尝试将此作为基本大纲:

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/

于 2013-03-22T12:49:55.200 回答
0

我不知道您要做什么,但您的代码似乎很奇怪。解决方法如下

c.send "#{k}=", params[:v]
于 2013-03-22T12:34:23.430 回答
0

关于什么

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])

于 2013-03-22T12:50:05.773 回答