【问题标题】:Strong parameters for array of records记录数组的强参数
【发布时间】:2015-01-21 11:27:33
【问题描述】:

强大的参数让我很困惑。我正在编写一个表单来一次创建多个记录。它们作为属性数组传入参数:

{ :appointments => [ { :field1 => 'value1'
                     , :field2 => 'value2'
                     }
                   , # next record
                   ]
}

然后在控制器中我想做类似的事情

params[:appointments].each do |a|
    app = Appointment.create! a
end

但是我在使用强参数时遇到了很多麻烦,例如 ForbiddenAttributeErrors。我试过使用appointment_params 和白名单属性,但没有运气。我找不到与我的用例匹配的任何好的文档。他们都假设记录数组应该嵌套在某个所有者记录下方,但这里不是这种情况。

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案1】:

    除了实际的模型属性外,请确保您将数组列入白名单。

    当您更改控制器以处理appointments 数组而不是一次处理一个约会时,您似乎使用了params.require 方法的脚手架版本并且没有更新该方法。

    这样的事情应该可以工作:

    params.require(:appointment).permit(:field1, :field2, appointments: [:field1, field2])
    

    params.require(:appointments).permit(:field1, :field2)
    

    不确定 yoru 代码的其余部分究竟是什么样的,但您似乎不允许数组本身,上面的代码示例尝试将我认为可能命名的属性列入白名单。

    【讨论】:

      【解决方案2】:

      如果你只是使用属性创建一个新的Appointment记录,你可以使用如下

      Appointment.create!(params.permit(applications: [:field1, :field2])[:applications])
      

      如果你真的想遍历数组,你可以这样做

      params[:appointments].each do |a|
        app = Appointment.create!(a.permit(:field1, :field2))
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多