将 Rails 2 应用程序转换为 Rails 3,我必须替换 gem searchlogic。现在,将 Rails 3.2.8 与 gem Ransack一起使用,我想构建一个使用现有范围的搜索表单。例子:
class Post < ActiveRecord::Base
scope :year, lambda { |year|
where("posts.date BETWEEN '#{year}-01-01' AND '#{year}-12-31'")
}
end
据我所知,这可以通过定义自定义ransacker来实现。可悲的是,我没有找到任何关于此的文档。我在Post
课堂上试过这个:
ransacker :year,
:formatter => proc {|v|
year(v)
}
但这不起作用:
Post.ransack(:year_eq => 2012).result.to_sql
=> TypeError: Cannot visit ActiveRecord::Relation
我尝试了ransacker
声明的一些变体,但它们都不起作用。我需要一些帮助...
更新:上面的范围只是一个例子。我正在寻找一种方法来使用 Ransack 中的每个现有范围。在 Ransack 的前身 MetaSearch 中,有一个特性要求search_methods
使用范围。Ransack 还没有开箱即用的支持。