从Meta_search升级到Ransack时“没有有效的谓词”错误?

时间:2014-01-08 10:07:21

标签: ruby-on-rails ruby rubygems ransack meta-search

我有一个ActiveRecord模型,其方法定义如下:

def state   

  if deleted?
    :deleted    
  else
    :expired
  end

end

'search_method'在模型中定义为:

  

search_method:state

在视图中:

  

= form.select:state,{:expired => '已过期',:已删除=> '已删除'} .invert,:include_blank => '全部'

使用 Meta_search ,此方法运行正常。但是当我用 Ransack 替换gem时,我在Sample Controller中得到: ArgumentError 没有州的有效谓词。

我在meta_search search_methods中关注此行为,因此我可能采取了错误的方法。有人帮帮我吗?

1 个答案:

答案 0 :(得分:0)

Ransack使用添加到您正在搜索的字段末尾的谓词来指示如何搜索它。如果您的模型上的属性为:state,则可以使用form.select :state_match,搜索匹配“已过期”或“已删除”的状态,其中_match表示匹配记录的状态为无论你选择什么。 (例如_cont(包含)或_start(以...开头)。

Ransack使SQL查询能够查找记录,因此,如果您的模型上有属性:deleted_at,则可以按存在或缺少搜索。它不会查看方法,只会查看存储在数据库中的信息。

更多谓词和信息在这里:https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching