投稿

has_manyな関係でも条件を設定できる

has_manyな関係でも条件を設定できる

has_many で関連付けたモデルに scope を定義しておくと、関連経由のメソッドチェーンでもそのscopeをそのまま呼び出せることを確認したメモ。user.objects.open のように書くと、関連先の絞り込み条件をそのままSQLのWHERE句に反映できる。

class User < ApplicationRecord
  has_many :objects
end

class Object < ApplicationRecord
  belongs_to :user

  scope :open, -> { where(status: 0) }
end
user = User.find(999)
user.objects.open.all #<= できるんだ!?
# => SELECT  `object`.* FROM `object` WHERE `object`.`user_id` = 999 AND `myobject`.`status` = 0