在同一模型中创建has_one关联

时间:2016-09-07 12:34:22

标签: ruby-on-rails database database-design

让我们考虑以下模型。

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'

但上面提到的并不适合我。

1 个答案:

答案 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列已经是索引的主键列,因此您自己会更加努力。