2011-12-04 53 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 –