一般的な混乱
私は 3 つのジャンルを持つことができるバンドを持っています。以前の SO 投稿で、これを処理する適切な方法はいくつかの手順であると読みました。
1) band.rb内
has_and_belongs_to_many :genres
2) band_genres 結合テーブルを作成する
ドキュメントを読んだ後でも、HABTM が実際に何を意味するのかについて少し混乱しています。普通は「バンドってジャンルが多い」と思ってしまうのであって、複数を持っているわけでも所属しているわけでもありません。したがって、それについての簡単な説明は素晴らしいでしょう。
備品との混同
また、band_genres のフィクスチャを実行するときに、
{
"The Reaper Band and Funk": { "band": "The Reaper Band", "genre": "Funk" },
"The Reaper Band and Rock": { "band": "The Reaper Band", "genre": "Rock" }
}
そして、「不明な」バンド列が表示されます。Railsは、「The Reaper Band」がバンドフィクスチャ(もちろん同じ名前)のバンドを参照し、そのIDを取得し、このフィクスチャの「バンド」が結合テーブルのband_idを参照することを知っているはずだと思いました. ハードコードされた数字よりも、フィクスチャがこのように見えることを望みます。
工場との混同
工場でバンドを作成するときに、ジャンルを割り当てたい:
Factory.define :band do |f|
f.sequence(:name) { |n| "Band#{n}" }
f.mailing_lists { |mailing_lists| [mailing_lists.association(:mailing_list)] }
f.genres 2
end
ここで、おそらくハードコーディングされたgenre_idが必要になることに気づきました。しかし、レールはそれを見て、「ああ、id=2 のジャンルを band_genres テーブルに追加したい」と言わないのはなぜですか。
Railsがすべての面倒な作業を処理してくれるとは思っていませんが、ルールを守りたいと思っています。