scoped_by大于或小于ActiveRecord(Rails)

时间:2009-08-18 19:03:15

标签: ruby-on-rails ruby activerecord

我想在Rails中使用动态范围,我按日期过滤。我想做这样的事情:

Foo.scoped_by_created_on(>the_future).scoped_by_created_on(<the_past).find(:all)

这可能还是我写了一个:conditions哈希?

3 个答案:

答案 0 :(得分:2)

您不能使用scoped_by执行此操作,但是您可以为此制作自己的范围。

named_scope :created_on_before, lambda { |time| { :conditions => ["created_on < ?", time] } }
named_scope :created_on_after, lambda { |time| { :conditions => ["created_on > ?", time] } }

或者查看Searchlogic,为此提供命名范围。

Foo.created_on_greater_than(the_future).created_on_less_than(the_past)

答案 1 :(得分:0)

我有一个名为by_star的插件,它为您提供过去和未来的方法(以及其他方法),以便您可以这样做:

@foos = Foo.past(some_time) do
  Foo.future(some_other_time)
end

答案 2 :(得分:0)

请注意,从Rails 3开始,可以采用更简洁的方法:

named_scope :created_between, -> (past,future) { where(created_on: past..future) }

用法:

Foo.created_between(the_past,the_future)