Как использовать фильтр в модели - PullRequest
1 голос
/ 11 октября 2011

Модель с именем Post, соответствующая таблице posts в БД. Post.find_within_4_days может получить мне последние 4 дня сообщений. Все мои следующие действия будут основаны на сообщениях за последние 4 дня. Я бы хотел, чтобы он был где-то отфильтрован или определен, поэтому я могу просто сослаться на него, а не повторять Post.find_within_4_days везде. Как мне сделать в модели Post?

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Предполагая, что вы используете Rails 3, вы можете использовать такую ​​область имен:

class Post < ActiveRecord::Base
  scope :within_4_days, where(# however you find your 4 day old posts #)
end

Затем вы можете использовать Post.within_4_days везде.

Если вы хотите только сообщенияза последние 4 дня в любом месте вы могли бы установить область по умолчанию вместо этого:

class Post < ActiveRecord::Base
  default_scope where(# however you find your 4 day old posts #)
end

, после чего (например) Post.all будет возвращать только сообщения за последние 4 дня.

2 голосов
/ 11 октября 2011

Еще более гибкий:

class Post < ActiveRecord::Base
  scope :within, lambda { |time| where("created_at > ?", Time.zone.now - time }
end

Post.within(4.days)
1 голос
/ 11 октября 2011

default_scope и scope - отличные варианты для вашего случая, обратитесь к этому замечательному сайту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...