1

has_and_belongs_to_many2 つのモデル間のテーブルに複数のレコードを追加するにはどうすればよいですか?

これまでのところ、1 つのレコードを作成し、そのレコードを更新する方法しかわかりません。結合テーブルに複数のレコードを追加したい。

現在、collection_select がありますが、update メソッドではレコードを更新することしかできず、新しいレコードを追加することはできません。

私の最善の推測は@group.workouts << workout_id、グループコントローラーの更新メソッドに何かを追加することですが、それを機能させる方法がわかりません。

私はここで正しい軌道に乗っていますか?

ワークアウトをグループに、グループをワークアウトに追加しようとしています。

助けてくれてありがとう!

編集1:

結合テーブルに 1 つのレコードを追加できるがありcollection_selectますが、結合テーブルに 2 番目、3 番目などのレコードを追加する方法を見つけようとしています。私collection_selectは:

<div class="field">
    <%= f.collection_select 'workout_ids', Workout.all, :id, :name, { :include_blank => ""} %>
</div>

簡単に言えば、グループにワークアウトを追加したいのですが、それは私ができることです。次に、同じグループに別のワークアウトを追加し、さらに別のワークアウトを追加したいと考えています。

4

2 に答える 2

5

編集:

これを適切に行う実際の方法は、この Gistで詳しく説明されています

したがって、これに対する答えは、コントローラーの更新アクションを次のように編集することです。

workout_id = params[:group].delete(:workout_ids)

    # Adding a workout
    if workout_id
      workout = Workout.find(workout_id)
      @group.workouts << workout
    end

上記のコードはworkout_id、パラメーターを受け取るローカル変数を:group作成し、メソッド:workout_id内から、たとえばグループの名前を変更したときに実際のグループを更新するための 2 番目のパラメーターを削除します。:group.delete

次に、新しいワークアウトを @group.workouts にプッシュするだけで、コレクションの選択からグループに新しいワークアウトを追加するたびに、結合テーブルに新しいレコードが作成されます。

于 2013-04-21T23:44:55.960 に答える