FUMIの開発日記

ソフトウェア開発のメモ的なブログです

Rails4のhas_many throughで条件を指定してレコードを参照する

目的

Rails4のhas_many throughで条件を指定してレコードを参照する

前提

rails 4.0.0を使います。 テーブルは以下のように作っているとします。

#relationshipテーブル
id: integer
member_id: integer
event_id: integer
flg: boolean
status: integer

#memberテーブル
id: integer

#eventテーブル
id: integer

model/relationship.rb

まずはrelationshipモデルで関連付けをします。

  belongs_to :member, class_name: "Member"
  belongs_to :event, class_name: "Event"

model/event.rb

次にeventモデルで参照について記述します。 ここでは、relationshipテーブルのflgカラムがtrueのレコードと、statusカラムが'3'のレコードを取得しています。

has_many :relationships, foreign_key: "event_id", dependent: :destroy
has_many :hoge, -> {where flg: true}, class_name: "Relationship", through: :relationships, source: :member
has_many :fuga, -> { where "status = 3"}, through: :relationships, source: :member 

以上でhas_many throughで条件を指定してレコードを参照することができます。

参考

Active Record Associations — Ruby on Rails Guides (4.3.3.1)