在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
答案 0 :(得分:4)
primary_key
定义要用作主键的数据库字段的名称,而不是默认的id
。
foreign_key
定义数据库字段的名称,该字段保留对另一个模型的主键字段的引用。
有关详情,请参阅Active Record Associations docs。
如果您想要概念性地理解主键和外键的作用,here is one writeup就此主题。
答案 1 :(得分:1)
他们是协会的对立面。
Rails获取foreign_key
的值,并使用class_name
搜索带有该值primary_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
中查看详情