多対多の関係を持つモデルのフォームを作成する最良の方法は何ですか?
詳細に:
User、Task、TaskAssignment の 3 つのモデルがあります。
ユーザーモデル
class User < ActiveRecord::Base
has_many :task_assignments
has_many :tasks, through: :task_assignments
end
タスク モデル
class Task < ActiveRecord::Base
has_many :task_assignments
has_many :users, through: :task_assignments
end
TaskAssignment モデル (結合テーブル)
has_and_belongs_to_many
TaskAssignment モデルに追加のフィールドが必要なため、 を使用できません。
class TaskAssignment < ActiveRecord::Base
belongs_to :task
belongs_to :user
end
新しいタスクを作成することで、複数のユーザーをタスクに割り当てることができるはずなので、このフォーム ビューを作成しました。
タスク編集フォーム ビュー
<%= form_for(@task) do |f| %>
<div class="field">
<%= f.label :note %><br>
<%= f.text_field :note %>
</div>
<select name="task[users]" size="5" multiple>
<% @users.each do |user| %>
<option value="<%= user.id %>"><%= user.email %></option>
<% end %>
</select>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
今、私はコントローラーでどのように進むべきか疑問に思います:
タスクコントローラー
def create
@task = Task.new(task_params)
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render action: 'show', status: :created, location: @task }
else
format.html { render action: 'new' }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
私はそのようなことをしなければならないと思います:
@task = Task.new(task_params)
users = ???
@task.users << users
- それは n:m データを保存する方法ですか、それとも他のマジック レール機能はありますか?
- 選択ボックスからデータを取得するにはどうすればよいですか? 選択ボックスの名前を に設定して受信しようとしました
name="task[users]"
が、変数には-fieldtask_params
しか含まれていませんnote