让我们考虑以下模型。
User{ id:number(primary_key), column1:string, column2:string)
现在,column1可以是任何字符串,但column2可以为null,也可以是column1中的值。但是,column1和column2不能相同。 I.E. column2将是外键,它将引用column1。
我将如何使用这些约束创建has_one关系。
类似的东西,
has_one :master_agreement, :class_name => 'User', :foreign_key => 'column2', :primary_key => 'column1'
但上面提到的并不适合我。
答案 0 :(得分:0)
要在rails中设置自加入关系,您希望使用belongs_to
而不是has_one
,因为关键区别在于belongs_to
将外键列放在模型上table - while has_one
将它放在另一端。
class User < ActiveRecord::Base
belongs_to :company # references users.company_id
has_one :company # references companies.user_id
end
让我们考虑一个您有类别层次结构的系统:
class Category < ActiveRecord::Base
belongs_to :parent, class_name: 'Category'
has_many :subcategories, class_name: 'Category', foreign_key: 'parent_id'
end
这会与引用categories.parent_id
的{{1}}外键列建立自我加入关系。
虽然您可能会使用与categories.id
不同的内容作为引用,但由于id列已经是索引的主键列,因此您自己会更加努力。