かなりハマったので覚書。
下記のようなテーブル構成。
[code]
Prefectures (都道府県マスタ)
id
prefecture_name
Users (ユーザマスタ)
id
user_name
current_prefecture_id (現住所)
birth_prefecture_id (出身地)
[/code]
やりたいことは、ユーザマスタの現住所と出身地の都道府県名を、都道府県マスタから取得したいということ。
結論から言うと、下記のようにアソシエーションをmodelクラスに定義する。
prefecture.rb
[ruby]
class Prefecture < ActiveRecord::Base
has_many :user
end
[/ruby]
user.rb
[ruby]
class User < ActiveRecord::Base
belongs_to :prefecture
belongs_to :current_pref, :class_name => "Prefecture", :foreign_key => "current_prefecture_id"
belongs_to :birth_pref, :class_name => "Prefecture", :foreign_key => "birth_prefecture_id"
end
[/ruby]
で、参照は下記のよう。
[ruby]
#現住所
user.current_pref.prefecture_name
#出身地
user.birth_pref.prefecture_name
[/ruby]
何にハマったかというと、アソシエーションの定義方法。
[ruby]
belongs_to :"current_pref" #呼び出す為の任意のエイリアス名
:class_name => "Prefecture" #対象クラス名
:foreign_key => "current_prefecture_id" #外部キー対象項目名
[/ruby]
しかも、対象クラス名のイニシャル文字を、小文字で書いていた。
しっかりと、アソシエーションの定義方法とオプションの意味を覚えましょう。
できてみると、SQLを記述するよりも、取得と表示がとても便利。すごいな。