私の理解では、テーブル間の関係は外部キーを介して実装されています。ただし、モデル間の関連付け (belongs_to など) を追加しても、データベース スキーマに変更はありません。何故ですか?関連性や関係性があることをレールは実際にどのように認識していますか?
質問する
47 次
2 に答える
0
ここでの秘訣は、belongs_to、has_one、has_many が機能するのは、適切なキーが既にデータベースにある場合のみです。
キーは通常<model>_id
.
したがって、post と blog の間の belongs_to 関係では、関係を使用して作成しなければならなかった posts テーブルに blog_id が必要です。
ブログと投稿の間の has_many についても同様です。
class Blog < ActiveRecord::Base
has_many :posts
end
blog_id
posts テーブルに外部キーを作成する移行が必要です。
于 2012-12-13T10:19:58.983 に答える
0
Rails は、外部キーだけでなく、モデル内の関係のみに言及することで、すべてのテーブル間の関連付けを認識します。外部キーの命名規則に従わないと、モデルでリレーションを指定しても、Rails はテーブル間のリレーションを見つけることができなくなります。次に、foreign_key とクラス名を明示的に指定する必要があります。
class Article < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :article
end
コメント テーブルではarticle_id
、独自のフィールドとともに を維持する必要があります。
その後、Rails は自動的にそれを と見なしarticle_id
ますforiegn_key
。
他の何か(例: art_id
)を書く場合は、次のarticle_id
ように伝える必要があります:
class Comment < ActiveRecord::Base
belongs_to :article, :class_name=>"Article", :foreign_key=>:art_id
end
于 2012-12-13T10:24:51.827 に答える