将多个字段值传递给 ransack

Passing multiple fields values to ransack

我有一个带有 table 的 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 做这样的事情吗?或者我还能如何解决我的问题,或者我应该使用其他东西?

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

您可以将任何字段与谓词结合起来。例如,您有字段 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