我有一个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中关注此行为,因此我可能采取了错误的方法。有人帮帮我吗?
答案 0 :(得分:0)
Ransack使用添加到您正在搜索的字段末尾的谓词来指示如何搜索它。如果您的模型上的属性为:state
,则可以使用form.select :state_match,
搜索匹配“已过期”或“已删除”的状态,其中_match
表示匹配记录的状态为无论你选择什么。 (例如_cont
(包含)或_start
(以...开头)。
Ransack使SQL查询能够查找记录,因此,如果您的模型上有属性:deleted_at
,则可以按存在或缺少搜索。它不会查看方法,只会查看存储在数据库中的信息。
更多谓词和信息在这里:https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching