2012-03-18 6 views
2

私のモデルとの関連付けによってhas_manyをセットアップしました。投稿された曲に複数のジャンルを追加できるフォームを作成しようとしています。私はこれのためにcollection_selectヘルパーを使用しています。ここで私のコードがどのように設定されているかの抜粋です。Railsを使用してhas_manyでcollection_selectを保存する

ソングモデル

has_many :song_genres 
has_many :genres, :through => :song_genres 

ジャンルモデル

has_many :song_genres 
has_many :songs, :through => :song_genres 

ソングジャンルモデル

belongs_to :song 
belongs_to :genre 

その後、私のnew.html.erb に私が持っているこの

collection_select :song, :genres, Genre.all, :id, :name, {:selected => 1}, {:multiple => true} 

私は

Can't mass-assign protected attributes: genres 

エラーに

を取得し、フォームを送信すると、私は、私はここに大きな何かが欠けています知っています。誰かがこれを正しく設定する方法について私を助けてくれる?

ありがとうございます!

+0

コメントは完全な解決策です。 – Dan

答えて

2

この方法を試してみてください:

collection_select :song, :genre_id, Genre.all, :id, :name, {:selected => 1}, {:multiple => true} 

Rails guideで述べたように: 「あなたはbelongs_toの関連付けを設定することを選択し(例えばcollection_select、select_tagとして、あるいは類似したヘルパー)を使用している場合は、の名前を渡す必要があります外部キー(上記のcity_idの例では)であり、関連自体の名前ではありません。

+0

私は ''未定義のメソッド 'genre_id' for#を取得しようとしましたが、これらのオプションを保存するにはコントローラに何が必要ですか?現在私が持っているのは@ song.saveです。それだけです。 – Dan

+0

私はあなたの質問をもう一度読んでいます、どのように選択して複数のジャンルを選択できますか? –

+0

':multiple => true'を設定すると、複数のオプションを選択できます – Dan

関連する問題