2011-09-09 9 views
-1

「EmployeeRecord」というモデルがあり、usernameというフィールドがあります。「Employee」という名前のフィールドがあり、usernameというフィールドがあります。Ruby:外部キーとhas_oneの関係はありますか?

私は私が行うときに2つのモデル間の関連付けを作成したい:

record = EmployeeRecord.find(1) 
record.employee // returns Employee instance 

私はちょうどこれを行う必要があると思いますが、どうやらそれは動作しません考えていた:

class EmployeeRecord < ActiveRecord::Base 
    has_one :employee, :foreign_key: username 
end 

EmployeeRecordにemployee_idフィールドを追加できないとします。私はRailsのチュートリアルを洗練し、今月のことを知りたがっていることを思い出しました。しかし、これらのRailsのチュートリアルはこれ以上滑ってしまいました。覚えています。私は非常に怒ったheheを作りました

答えて

7

また、関連付けに使用するprimary_keyを指定する必要があります。そうでない場合は、デフォルトで「id」に設定されます。あなたの声明は実際には「私のIDフィールドと等しいテーブル従業員のフィールドユーザー名を検索します。

class EmployeeRecord < ActiveRecord::Base 
    has_one :employee, :foreign_key => username, :primary_key => :username 
end 

でもねえ...なぜしないでください:あなたが実際に欲しいのはこれはトリックを行う必要があります

「私のユーザー名フィールドに等しいテーブルの従業員のフィールドusernameの検索」ですidsを使用していますか?

+0

ありがとう、これは私が望んだものです。私はあなたに良いカルマを願っています、私の友人。 –

+0

追加するには、両方にforeign_keyを設定すると、 'employee.record'もできます。申し訳ありませんが、私は両方の関係について宣言を使用することを忘れていました。 – agmcleod

2

Employeeモデルのbelongs_toメソッドで外部キーオプションを追加します。

class Employee < ActiveRecord::Base 
    belongs_to :employee_record, foreign_key: username 
end 

has_oneまたはhas_manyは親であるため、外部キー値/列は格納されません。それは、子どもがしていることです。それは、関係の帰属側にあります。

+0

残念ながら私はまだrecord.employeeを行うことができません –

関連する問題