2011-12-04 23 views
1

にあなたはこれら二つのモデルの最後の行は同じコードを使用して見ることができます:範囲where句

class Position < ActiveRecord::Base 
    scope :last_day, 
    where('positions.created_at > ? AND positions.hidden = ?', 
    DateTime.now.in_time_zone("Sofia").yesterday.beginning_of_day + 10.hours, false) 
end 

class Subscriber < ActiveRecord::Base 
    scope :notify_today, 
    joins(:tags => :positions). 
    where('positions.created_at > subscribers.created_at 
    AND positions.created_at > ? AND positions.hidden = ?', 
    DateTime.now.in_time_zone("Sofia").yesterday.beginning_of_day + 10.hours, false) 
end 

は、第2のモデルで何とか「LAST_DAY」スコープを再利用することが可能ですか?

+0

を行うことができる必要がありますので、&は、merge()へのエイリアスですポジション " - ポジションにはすでにこれらのパラメータが設定されているので、それだけでは必要ありませんか?あなたはすでにこれを試してみて申し訳ありません。 – Trip

答えて

1

where()joins()両方ActiveRecord::Relationオブジェクトを返す、と彼らは他のActiveRecord::Relationオブジェクトをマージすることができますmerge()と呼ばれる方法があります。したがって、あなたは、単にまた、この

scope :notify_today, joins(:tags => :positions).merge(Position.last_day) 

行うことができますが、もっぱらその `に参加する加入者の加入関係を削除した場合、あなたもこの

scope :notify_today, joins(:tags => :positions) & Position.last_day 
+0

ありがとうございます。これはうまくいった。私はまた、ここで 'マージ'についての情報を見つける:http://asciicasts.com/episodes/215-advanced-queries-in-rails-3 –