Active Recode による複雑なアソシエーション

2012年1月26日 Posted by PURGE

かなりハマったので覚書。
下記のようなテーブル構成。

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を記述するよりも、取得と表示がとても便利。すごいな。

参考までに。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です