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