Ruby on rails 创建包含嵌套属性的联接模型记录

Ruby on rails 创建包含嵌套属性的联接模型记录,ruby-on-rails,nested-attributes,has-and-belongs-to-many,Ruby On Rails,Nested Attributes,Has And Belongs To Many,我有以下型号 class User < ActiveRecord::Base has_many :project_users, dependent: :destroy has_many :projects, through: :project_users end class ProjectUser < ActiveRecord::Base belongs_to :user belongs_to :project has_many :participan

我有以下型号

class User < ActiveRecord::Base
   has_many :project_users, dependent: :destroy
   has_many :projects, through: :project_users
end

class ProjectUser < ActiveRecord::Base
   belongs_to :user
   belongs_to :project
   has_many :participants
   has_many :tasks, through: :participants
end

class Task < ActiveRecord::Base
   belongs_to :project
   has_many :participants
   has_many :project_users, through: :participants
   accepts_nested_attributes_for :participants
end

class Participant < ActiveRecord::Base
   belongs_to :project_user
   belongs_to :task
 end
对参与者的属性进行注释

我认为:

实际生成的HTML:

我通过ajax添加选项,value=ProjectUser.id 我必须这样做,因为我不知道会有哪些项目用户,除非为一项任务选择了一个具体的项目

我得到的错误是:

您的param散列将ProjectUser的id作为participant_id,因此当它查询数据库时,它正在查找具有这些id的参与者模型。您需要将这些设置为参与者列表中的project_user_id,如下所示:

participants: [ { project_user_id: 57 }, { project_user_id: 58 } ]

我对构建不太熟悉,但这方面的东西应该允许AR正确地构建关联。

请添加错误回溯。的ID是什么?Ie哪一类?57、58、59是Projectuser的ID
= f.association :participants, as: :select
 <input name="task[participant_ids][]" type="hidden" value="">
 <select class="select optional form-control" id="task_participant_ids" multiple="multiple" name="task[participant_ids][]">
   <option value="57">AlexandeR MazeiN</option>
   <option value="59">Firenze</option>
   <option value="58">Vasily Strekotkin</option>
 </select>
Started POST "/tasks" for 127.0.0.1 at 2014-04-11 13:18:24 +0300 User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = 6 ORDER BY "users"."id" ASC LIMIT 1 Processing by TasksController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"aXuk9ZuDvFZce+sbIQLRhWZlVjitMvySaJ7CwWfdmaQ=", "task"=>{"project_id"=>"20", "priority_id"=>"4", "project_phase_id"=>"40", "title"=>"Skepta", "due_date"=>"", "estimation"=>"8", "responsible_id"=>"6", "participant_ids"=>["", "57", "58"], "description"=>""}, "commit"=>"Create Task"} Team Load (0.4ms) SELECT "teams".* FROM "teams" WHERE "teams"."id" = $1 LIMIT 1 [["id", 3]] Participant Load (0.5ms) SELECT "participants".* FROM "participants" WHERE "participants"."id" IN (57, 58) Completed 404 Not Found in 7ms ActiveRecord::RecordNotFound - Couldn't find all Participants with IDs (57, 58) (found 0 results, but was looking for 2):
participants: [ { project_user_id: 57 }, { project_user_id: 58 } ]