接受来自nested_form复选框的数据,并使用复选框中的数据创建记录

时间:2014-10-07 15:22:16

标签: ruby-on-rails ruby nested-forms strong-parameters

我有一个产品类,产品对零或多个角色可见。所以我创建了一个名为content_roles的多态模型,它存储了角色的id和content_id(将是product_id或event_id),以及content_type(产品,事件等)。

我使用nested_form gem接受角色id(使用check_box)在product_role中存储产品和角色关系

我面临的问题是我无法创建content_role记录。在我的日志中,我获得了未经许可的参数:role_id

  

参数:{“utf8”=>“✓”,“authenticity_token”=>“xxxxxxxxxxxxxxxxxxxxdLH99ZWLrf8dgT3gcBops =”,“product”=> {“product_name”=>“some product”,“product_description”=> ;“某些产品说明”,“content_roles_attributes”=> {“role_id”=> [“1”,“2”,“”]}},“提交”=>“创建产品”}

在我看来我写过

 = f.simple_fields_for :content_roles_attributes do |role|
  = role.input :role_id,label: "visible to", as: :check_boxes,label: "Role",collection: Role.all,:required=>true

控制器允许params看起来像

def product_params
 params.require(:product).permit(:product_description,:product_name,
 content_roles_attributes:  [:role_id,:id],
 multimedia_attributes:[:asset,:_destroy,:id])
end

产品型号看起来像

 class Product     
  has_many :content_roles, as: :content
  has_many :multimedia ,as: :storable
  # Nested attributes
  accepts_nested_attributes_for :multimedia
  accepts_nested_attributes_for :content_roles
 end

这是content_role模型

class ContentRole < ActiveRecord::Base
 belongs_to :content, polymorphic: true
 belongs_to :role
 belongs_to :news
 belongs_to :product
end

1 个答案:

答案 0 :(得分:0)

尝试将product_params更改为:

def product_params
  params.require(:product).permit(
    :product_description,
    :product_name,
    content_roles_attributes:  [:id, role_id: []],
    multimedia_attributes: [:asset, :_destroy,:id]
  )
end