Сфера действия в где пункт - PullRequest
1 голос
/ 04 декабря 2011

Вы видите, что последние строки этих двух моделей используют один и тот же код:

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' во второй модели?

1 Ответ

2 голосов
/ 05 декабря 2011

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...