例えば、こういったテーブルがあった時、
hoges | foos |
---|---|
id | id |
title | hoge |
last_foo | no |
hogesはfoosをhas_manyで持つ関係とする。
通常はこういうfoosを指定すれば、foos.hogeに対してリレーションを貼れるんだけど、
has_many :foos
last_fooカラムでfoosの特定のレコードを指したい場合は以下のように記述する。
belongs_to :last_foo, foreign_key: "last_foo", class_name: 'Foo', required: false
foreign_keyは結合元のhogesのカラム名。class_nameは結合先のモデル名。デフォルトで必須のモデルプロパティとなるから後から決まるような値の場合、require:falseとする。
また、この場合、foos.idと結合しにいくんだけど、
hoges join foos on hoges.last_foo = foos.id
foos.noとかにしたい場合、primary_keyという引数を指定するみたい。
belongs_to :last_foo, foreign_key: "last_foo", primary_key:"no" class_name: 'Foo', required: false
するとこうなる。
hoges join foos on hoges.last_foo = foos.no
リンク