1

私の理解では、テーブル間の関係は外部キーを介して実装されています。ただし、モデル間の関連付け (belongs_to など) を追加しても、データベース スキーマに変更はありません。何故ですか?関連性や関係性があることをレールは実際にどのように認識していますか?

4

2 に答える 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_idposts テーブルに外部キーを作成する移行が必要です。

于 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 に答える