2016-09-07 62 views
0

让我们考虑下面的模型。在同一模型中创建has_one关联

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

如果您需要自联接的外键值,那么引用表的id会更有意义,不是吗? –

+0

实际上这必须工作 –

回答

0

要设置在轨自加盟关系,要使用belongs_tohas_one的关键区别在于belongs_to地对模型的表的外键列 - 而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.idcategories.parent_id外键列自加盟关系。

尽管您可能会使用与categories.id不同的东西作为参考,但您只是将自己的工作变得更加困难,因为id列已经是索引主键列。

相关问题