标签: accepts-nested-attributes

如何添加多对多列的记录

我有以下模特

用户

has_many :users_contacts
has_many :contacts, through: :users_contacts
accepts_nested_attributes_for :contacts, allow_destroy: true
Run Code Online (Sandbox Code Playgroud)

联系

has_many :users_contacts
has_many :users, through: :users_contacts
accepts_nested_attributes_for :users_contacts, allow_destroy: true
Run Code Online (Sandbox Code Playgroud)

UsersContact

belongs_to :users
belongs_to :contacts
Run Code Online (Sandbox Code Playgroud)

我正在使用以下强参数

params.require(:user).permit(:id, :email, 
                      contacts_attributes: [:id, :first_name, :last_name, 
                      users_contacts_attributes: [:id, :contact_id, :user_id, :order]])
Run Code Online (Sandbox Code Playgroud)

我现在面临的问题是每当我更新与用户users_contacts_attributes如{CONTACT_ID:5,顺序为:5}它会创建两个记录一个与order: nil及其他与order: 5我在PARAMS获得订单.

我想跟随

  1. 不希望创建重复记录.

  2. 使用额外列保存记录在连接表中,即 order

我的参数类似于以下内容

{"id"=>4,
 "email"=>"abc@xyz.com",
 "contacts_attributes"=>
  [{"id"=>150,
    "first_name"=>"Pqr",
    "is_shareable"=>true,
    "users_contacts_attributes"=>[{"id"=>87, "user_id"=>4, "contact_id"=>150, "order"=>100}]
   },
   {"first_name"=>"Def",
    "is_shareable"=>true,
    "users_contacts_attributes"=>[{"user_id"=>4, "order"=>101}]
   }
  ]
}
Run Code Online (Sandbox Code Playgroud)

ruby many-to-many ruby-on-rails ruby-on-rails-4 accepts-nested-attributes

6
推荐指数
1
解决办法
172
查看次数