Tag: arel ransack

Ransack:如何使用现有范围?

将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 据我所知,这可以通过定义自定义搜索引擎来实现。 可悲的是,我没有找到任何关于此的文档。 我在Post类中试过这个: ransacker :year, :formatter => proc {|v| year(v) } 但这不起作用: Post.ransack(:year_eq => 2012).result.to_sql => TypeError: Cannot visit ActiveRecord::Relation 我尝试了一些ransacker声明的变体,但它们都不起作用。 我需要一些帮助… 更新:上面的范围只是示例。 我正在寻找一种方法来使用Ransack中的每个现有范围。 在Ransack的前身search_methods ,有一个名为search_methods的function用于使用范围。 Ransack 尚未支持此开箱即用。

Ransack对HABTM或HMT相关记录的计数进行排序

我在Theme和Quote模型之间有HABTM关系。 themes index视图显示与每个主题关联的引号计数。 我想在该列上添加一个Ransack sort_link ,因此可以按照相关quotes的数量对themes进行排序。 我使用计数器缓存列成功完成了has_many关联,但Rails不支持HABTM关联的计数器缓存列。 到目前为止,我有一个范围,它将一个名为quotes_count的虚拟属性(通过执行单个查询,避免N + 1)添加到Theme模型: scope :with_quotes_count, -> do joins(‘LEFT OUTER JOIN quotes_themes on quotes_themes.theme_id = themes.id’) .select(‘themes.*, COUNT(quotes_themes.quote_id) as quotes_count’) .group(‘themes.id’) end 似乎我必须使用ARel将上述范围转换为“Ransacker”,但到目前为止我所有的尝试都失败了。 我正在使用Rails 4.2.2,ARel 6.0.4和PostgreSQL 9.5.4。 任何帮助将不胜感激。