将多个字段值传递给ransack

时间:2016-09-18 15:03:48

标签: ruby-on-rails ruby-on-rails-4 search ransack

我有一个带有表的Rails应用程序,我希望在每列的顶部都有搜索字段,这些字段应该对列执行搜索,并且这些搜索应该一起工作。所以我正在寻找一种实现它的方法,偶然发现了Ransack gem,它看起来不错,所有它的选择和排序功能,但我不能理解我是否可以用它来解决我的问题。

从文档中我看到我可以像这样传递一个参数 User.ransack(first_name_cont: 'Rya').result.to_sql

但我认为这对我的问题还不够,我需要类似的东西 User.ransack(first_name_cont: 'Foo', last_name_eq: 'Bar', middle_name_in: [Moo, Boo]).result.to_sql

我可以用Ransack做这样的事吗?或者我怎么能用它来解决我的问题,或者我应该用别的东西?

1 个答案:

答案 0 :(得分:0)

Ransack负责自己搜索每个领域。因此,您可以在搜索中指定表中存在的任何字段。

您可以将任何字段与谓词组合在一起。例如,您有字段age

 User.ransack(age_eq: 21) # => age = 21
 User.ransack(age_lt: 21) # => age < 21
 User.ransack(age_in: [21]) # => age in [21]

与另一个字段'name'结合使用:

User.ransack(age_lt: 21, name_eq: 'Tim') # => age < 21 AND name = 'Tim'
User.ransack(age_gteq: 21, name_eq: 'Tom') # => age >= 21 AND name = 'Tom'

您可以使用in谓词或not_in进行相反操作来传递多个值。

此外,see basic predicates with description