0

アプリには多数の多対多の関係があります。

リレーション自体に関する情報を保存する必要はないのでhas_and_belongs_to_many、モデルでリレーションを使用しています。

Active Record のドキュメントを読みましたが、私の戦略は正しいと思われます、まだデータベースに結合テーブルを作成する必要があるのか​​、Rails 3.2 の ActiveRecord がモデル リレーションのみを使用してそれを処理できるほどスマートなのかはわかりません。 .

参考文献や説明をいただければ幸いです。

- - - 壊す - - -

リレーションシップ自体に関するデータを保存する必要がありhas_many => through、モデルで使用していた場合、「スルー」テーブルから主キーを削除する必要がありますか (たとえば、2 つの外部キーのみを持つようにしますか?)

ありがとうございました!

4

1 に答える 1

0

はい、has_and_belongs_to_many 関連付けの結合テーブルを作成する必要があります。Rails では、'migrate to create' が必要であることを忘れないでください。この記事を例として使用すると、モデルとモデルがあるとAccountRoleます。この移行によって結合テーブルを作成できます。

rails generate migration create_accounts_roles_join_table

次に、作成したばかりの移行ファイルを編集します

create_table :accounts_roles, :id => false do |t|
  t.integer :account_id
  t.integer :role_id
end

:id => falseこれを含めると、テーブルの作成時に通常生成される主キーが除外されるため、含めることが重要です。また、2 つの外部キーaccount_idとを指定しましたrole_id

両方のモデルで HABTM 関連付けを実行rake db:migrateして追加すると、すべてがセットアップされます。

また、補足としてjoin_table、移行ジェネレーターの最後に追加する必要はありませんが、より説明的であり、外部キーを追加するときintegerに置き換えることができます。referencesそれらは同等ですが、もう少し説明的かもしれません。

質問の 2 番目の部分では、テーブルから主キーを削除する必要はありません。

于 2013-05-23T04:28:05.690 に答える