【问题标题】:Rails 4, create multiple objects - how to permit it?Rails 4、创建多个对象——如何允许呢?
【发布时间】:2014-04-09 05:21:03
【问题描述】:

如何允许这个参数:

contacts: [ 
    {:value => 'value', :contacts_type => 'contact_type'}, 
    {:value => 'value', :contacts_type => 'contact_type'}, 
]

在一个 JSON 请求中通过控制器操作创建多个对象?

【问题讨论】:

    标签: ruby-on-rails ruby json strong-parameters mass-assignment


    【解决方案1】:

    如下所示,contacts 将是具有特定属性 valuecontacts_type 的资源数组:

    params.permit(contacts: [:value, :contacts_type])
    

    【讨论】:

    • 那么“创建”方法应该是什么样子?如果我只使用 company.contacts.create(contacts_params) 它会返回错误:ActiveRecord::UnknownAttributeError (unknown attribute: contacts)
    • @kuatro 将attr_accessor :contacts 添加到您的模型类中。它应该工作。
    • @AlokAnand 添加 attr_accessor :contacts 将使用 nil 值创建记录
    【解决方案2】:

    如果你得到如下参数:--

    :params=>{:xyz => {:contacts => [{:value => 'value', :contacts_type => 'type'}, ..]}}
    

    然后执行以下操作:--

    params.require(:xyz).permit(contacts: [:value, :contacts_type])
    

    如果contacts 只是表单字段名称部分,则将attr_accessor :contacts 添加到您的模型中。

    【讨论】:

      【解决方案3】:

      解决这个问题应该是

      def contact_params
         new_params = params.permit(contacts: [:value, :contacts_type])
         new_params[:contacts] if new_params
      end
      

      如果有,请提出替代解决方案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        • 2016-03-04
        • 1970-01-01
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多