2011-12-04 81 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 

是否有可能以某種方式重新使用「LAST_DAY」範圍,第二個模型?

+0

如果刪除用戶的聯結關係到專門的加盟'位置「, - 因爲Position已經設置了這些參數,這不就是你需要的嗎?對不起,如果你已經嘗試過。 – Trip

回答

1

where()joins()都返回ActiveRecord::Relation對象,他們有一個叫做merge()方法,它可以合併其他ActiveRecord::Relation對象。因此,你可以簡單地做到這一點

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

此外,&是一個別名merge(),所以你也應該能夠做到這一點

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

謝謝。這工作。我也在這裏找到關於'merge'的信息:http://asciicasts.com/episodes/215-advanced-queries-in-rails-3 –