2016-07-08 4 views
0

ActiveRecordモデルで関連付けを定義するときに、foreign_keyprimary_keyの違いを理解しようとしています。両方を使用する必要がありますか?違いはなんですか?ActiveRecord関連付けを定義する際のforeign_keyとprimary_keyの違いは何ですか?

class SomeModel < ActiveRecord::Base 
    has_one :something_else, foreign_key: 'some_id', primary_key: 'some_id' 
end 

class SomethingElse < ActiveRecord::Base 
    self.primary_key = 'some_id' 
    belongs_to :some_model, foreign_key: 'some_id', primary_key: 'some_id' 
end 
primary_key

答えて

2

主キーの代わりにデフォルトidとして使用するデータベースフィールドの名前を定義します。

foreign_keyは、別のモデルの主キーフィールドへの参照を保持するデータベースフィールドの名前を定義します。

詳細はActive Record Associations docsを参照してください。

プライマリキーと外部キーの役割について概念的に理解したい場合は、このトピックのhere is one writeupを参照してください。

1

これらは関連の反対側にあります。

Railsは例えばその値のprimary_key

でレコードをclass_nameforeign_keyの値と検索モデルを取ります

class PhoneNumber < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_one :phone, foreign_key: :this_users_phone_id_field 

    has_many :others_with_this_number, ->(user){where.not(id: user.id)}, 
    class_name:'User', 
    foreign_key: :this_users_phone_id_field, 
    primary_key: :this_users_phone_id_field 
end 

rails docs

の詳細情報
関連する問題