【问题标题】:save multiple parameters in a loop, rails controller在一个循环中保存多个参数,rails 控制器
【发布时间】:2013-03-22 12:23:10
【问题描述】:

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

【问题讨论】:

  • 试试 c.send(k) = params[:v]
  • @Rubyman 不会像你想象的那样工作

标签: ruby-on-rails database loops parameters controller


【解决方案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/

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我已经更新了我的问题,因为我不确定我的解释是否正确
    【解决方案3】:

    怎么样

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

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多