2016-09-07 12 views
0

以下のモデルを考えてみましょう。同じモデル内にhas_oneの関連付けを作成する

User{ id:number(primary_key), column1:string, column2:string) 

ここで、column1には任意の文字列を指定できますが、column2はnullまたはcolumn1の値を持つことができます。ただし、column1とcolumn2は同じにすることはできません。 I. column2は外部キーになり、column1を参照します。

どのようにこれらの制約とhas_one関係を作成しますか。

何かのように、

has_one :master_agreement, :class_name => 'User', :foreign_key => 'column2', :primary_key => 'column1' 

が、私のために動作しません言及した上で。もう一方の端のhas_oneの場所にそれをしながら、 - セットアップするに

+1

自己結合のために外部キー値が必要な場合は、テーブルのIDを参照する方が合理的でしょうか? –

+0

実際にはこれが動作する必要があります –

答えて

0

あなたは重要な違いとしてbelongs_toないhas_oneを使用するレールで自己参加の関係はbelongs_toは、モデルのテーブルに外部キー列を置くことです。

class User < ActiveRecord::Base 
    belongs_to :company # references users.company_id 
    has_one :company # references companies.user_id 
end 

あなたがカテゴリの階層を持つシステムを検討しましょう:これはcategories.idを参照categories.parent_id外部キー列と自己参加の関係を作成します

class Category < ActiveRecord::Base 
    belongs_to :parent, class_name: 'Category' 
    has_many :subcategories, class_name: 'Category', foreign_key: 'parent_id' 
end 

を。

参考文献としてcategories.idと異なるものを使用する可能性がありますが、id列はすでに索引付き主キー列であるため、自分自身を難しくしているだけです。

関連する問題