したがって、HABTM 関係を保存したいのですが、モデルに余分なフィールドがあるため、has_many を使用してメソッドを使用しています。ここに私のモデルがあります:
#project_task.rb
class ProjectTask < ActiveRecord::Base
attr_accessible :description, :name, :user_id, :project_id, :user_ids
belongs_to :project
belongs_to :user #Created by
has_many :project_task_users #Here is the HABTM
has_many :users, :through => :project_task_users #AND HERE
validates :name, :presence => true
validates :project_task_users, :length => { :minimum => 1} #must have atleast 1 record in the HABTM relation
accepts_nested_attributes_for :project_task_users
end
#project_task_user.rb
class ProjectTaskUser < ActiveRecord::Base
belongs_to :user
belongs_to :project_task
end
私のフォーム:
<p>Users:</p>
<% for user in @users %>
<div>
<%= check_box_tag "project_task[user_ids][]", user.id, @task.users.include?(user) %>
<%= user.name %> - <%= user.company.name %>
</div>
<% end %>
私のコントローラー:
得る
def new_task
@project = Project.find(params[:project_id])
@task = ProjectTask.new(:project_id => @project.id)
@users = @project.users
end
役職
def new_task_post
@project = Project.find(params[:project_id])
@task = ProjectTask.new params[:project_task]
@task.user_id = current_user.id
if @task.save
redirect_to @project
else
@users = @project.users
render action:"new_task"
end
end
送信すると、@task.save
false が返され、project_task_users
検証とともにエラー配列が返されます
アップデート
Pablo89 が指摘したように、check_box_tag の名前をこれに変更
<%= check_box_tag :user_ids, user.id, @task.users.include?(user), :name => 'project_task[user_ids][]' -%>
し、検証をコメントアウトした場合にのみ保存します。project_task の作成中にユーザーが選択されていることを確認するにはどうすればよいですか?