Artistモデルと、Genreモデルがあり、多対多の関係です。
Schemafileが、
create_table "artists_genres", force: :cascade do |t| t.integer "genre_id", limit: 4 t.integer "artist_id", limit: 4 end create_table "artists", force: :cascade do |t| t.string "name", limit: 255 t.string "image" end create_table "genres", force: :cascade do |t| t.string "genre", limit: 255 end
こうなっていて、モデルファイルはそれぞれ
artist.rb
ruby
1 has_and_belongs_to_many :genres
genre.rb
ruby
1 has_and_belongs_to_many :artists
このようになっています。
artistのeditページより、そのアーティストのジャンルを1つ~複数選んで変更の保存をしたいと考えています。
artists_controller.rbは
ruby
1 def update 2 @artist = Artist.find(params[:name]) 3 @artist.update_attributes(artist_params) 4 redirect_to :controller => 'artists', action: 'show', name: @artist.name 5 end 6 7 private 8 9 def artist_params 10 params.require(:artist).permit(:image, :genre_ids => []) 11 end
のようになっており、
editのviewファイルは、
= form_for @artist, :html=>{:multipart=>true} do |f| = f.file_field :image = f.collection_select(:genre_ids, Genre.all, :id, :genre, {prompt: true}, {multiple: true}) = f.submit '編集を保存する'
というようになっています。
現状、editページの表示には問題ないのですが、そのフォームを送信したところでエラーがなにもおこらず、redirect_to :controller => 'artists', action: 'show', name: @artist.name
が実行されアーティストのshowページが表示されるのですが、選択したジャンルはそのアーティストのジャンルとして保存されていません。
関連づいたモデル間の操作方法がわからず、躓いています。
経験をお持ちの方、どうかお力添えください。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/14 12:22
2016/06/15 08:35