ActiveAdminを使用してECサイトの管理画面を作っています。
1つの商品に複数ジャンルを持っています。
例えば商品AというCDは、ROCKとJAZZという2ジャンル持てたりします。
・商品マスタ(Itemテーブル)
・ジャンルマスタ(Genreテーブル)
・商品とジャンル紐付けマスタ(ItemGenreテーブル)※中間テーブル
Model
Ruby
1#/app/models/item.rb 2has_many :item_genres, dependent: :destroy 3accepts_nested_attributes_for :item_genres, :allow_destroy => true 4 5#/app/models/genre.rb 6has_many :item_genres 7 8#/app/models/item_genre.rb 9belongs_to :item 10belongs_to :genre
ActiveAdmin
Ruby
1#/app/admin/items.rb 2permit_params :artist_id, item_genres_attributes: [:genre_id, :_destroy] 3 4 form do |f| 5 f.inputs do 6 f.input :item_name 7 8 f.has_many :item_genres, allow_destroy: true, heading: false, new_record: true do |g| 9 g.label :genre_id 10 g.collection_select :genre_id, Genre.all, :id, :genre_name 11 end 12 end 13 f.actions 14 end
1つの入力画面で、
親モデル(Item)と子モデル(GenreItem)を同時に登録&更新&削除できるようにしたいです。
現在、
- 登録はできる
- Edit画面で親モデルは更新可能、子モデルは更新されずに追加されてしまう
- 登録時にジャンル「ROCK」を登録、Edit画面で「ROCK」が表示される
- 編集画面で「ROCK」を「JAZZ」に変更し更新ボタンクリック
- 再度編集画面を開くと「ROCK」と「JAZZ」になっている(変更ではなく追加されている)
- 「ROCK」と「JAZZ」のまま更新すると、再度編集画面を開くと「ROCK」「JAZZ」「ROCK」「JAZZ」になってしまっている
- 削除チェックボックスにチェックを入れると、削除されないが、追加されることは防げる
- 編集画面で「ROCK」「JAZZ」が表示されており、両方「演歌」に変更&削除チェックボックスをON
- 再度編集画面を開くと「ROCK」「JAZZ」のまま
ずっと調べて編集したのですが一向に解決できません。。
アソシエーションや設定に誤りがあればご教授いただきたいです。
足りないコードなどありましたら提示させていただきます。
宜しくお願い致します。
あなたの回答
tips
プレビュー