2014-01-08 37 views
5

我有像这样定义的方法ActiveRecord模型:从Meta_search升级到Ransack时出现“无效谓词”错误?

def state 

    if deleted? 
    :deleted  
    else 
    :expired 
    end 

end 

的 'search_method' 在模型中被定义为:

search_method:状态

在查看:

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

随着Meta_search,这种方法是工作的罚款。但是当我用Ransack取代了宝石时,我得到:参数错误在样品控制器中 没有有效的状态谓词。

我跟随meta_search search_methods的这种行为,所以我可能会采取错误的方法。任何人都可以帮助我吗?

+0

我认为你需要谓词适用于像'state_start'领域。看看这个问题https://github.com/activerecord-hackery/ransack/issues/22 – phoet

回答

0

Ransack使用一个谓词添加到您要搜索的字段的末尾,以指示如何搜索它。如果在模型上有:state的属性,则可以使用form.select :state_match,搜索与“过期”或“已删除”匹配的状态,其中_match表示将记录与所选内容的状态进行匹配。 (像_cont(包含)或_start(开头))。

洗劫使得SQL查询来查找记录,所以如果你对你的模型像:deleted_at有一个属性,你可以通过存在或缺的搜索。它不会查看方法,只是存储在数据库中的信息。

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

相关问题