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

Raj*_*ran 5 ruby rubygems ruby-on-rails meta-search ransack

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

def state   

  if deleted?
    :deleted    
  else
    :expired
  end

end
Run Code Online (Sandbox Code Playgroud)

'search_method'在模型中定义为:

search_method:state

在视图中:

= form.select:state,{:expired =>'Expired',:deleted =>'Deleted'} .invert,:include_blank =>'All'

使用Meta_search,这种方法运行正常.但是当我用Ransack替换gem时,我得到:Sample Controller中的ArgumentError没有状态的有效谓词.

我正在从meta_search search_methods中跟踪此行为,因此我可能采取了错误的方法.有人帮我吗?

小智 0

Ransack 使用添加到您要搜索的字段末尾的谓词来指示如何搜索它。如果您的模型上有 的属性:state,则可以使用“将记录与您选择的任何状态相匹配”来搜索与“过期”或“已删除”匹配的form.select :state_match,状态_match。(诸如_cont(包含)或_start(以)开头)。

Ransack 使用 SQL 查询来查找记录,因此如果您的模型上有一个属性,例如:deleted_at您可以按存在或缺失进行搜索。它不会查看方法,只会查看数据库中存储的信息。

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