如何在Model中使用过滤器

时间:2011-10-11 15:59:18

标签: ruby-on-rails

名为Post的模型,对应于db中的posts表。 Post.find_within_4_days可以在过去4天内收到我的帖子。以下所有操作都将基于过去4天的帖子。我希望它可以在某处进行过滤或定义,因此我可以引用它而不是在任何地方重复Post.find_within_4_days。我怎么做Post模型?

3 个答案:

答案 0 :(得分:3)

假设您正在使用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天的帖子。

答案 1 :(得分:2)

更灵活:

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

Post.within(4.days)

答案 2 :(得分:1)

default_scopescope是适合您案例的绝佳选择, 请参阅此wonderful site