Rails Ransack gem:使用一个条件搜索多个值

Posted

技术标签:

【中文标题】Rails Ransack gem:使用一个条件搜索多个值【英文标题】:Rails Ransack gem: search for multiple values with one condition 【发布时间】:2021-12-29 06:41:14 【问题描述】:

我使用 ransack gem,我有一个选择字段 event_id,它可以是字符串或数组,例如:90 或 [145、147、148]

我的代码,传入数组时返回错误:

ransack("job_name_cont" => job_name, "event_id_eq" => event_id).result
[1] pry(Job)> ransack("job_name_cont" => job_name, "event_id_eq" => event_ids).result 
NoMethodError: undefined method `to_i' for [145, 147, 148]:Array
Did you mean?  to_s
               to_a
               to_h

我的模特:

class Job < ActiveRecord::Base
  belongs_to :event
end

class Event < ActiveRecord::Base
  has_many :jobs, dependent: :destroy
end

如何使用 event_id 进行搜索?

【问题讨论】:

ransack("job_name_cont" =&gt; job_name, "event_id_in" =&gt; [event_ids].flatten).result 工作吗? 非常感谢,它正在使用 event_id,它必须是一个数组 我会添加一个答案。 【参考方案1】:

如果您查看Ransack's Search Matchers,您会看到*_in - match any values in array,如果您想在数组中搜索,这就是您所需要的。

因为您的 event_ids 可以作为字符串或数组输入,而 *_in 需要数组,所以我们必须确保始终为它提供数组。

[event_ids].flatten # returns an array all the time

下面的查询现在应该可以正常工作了。

ransack("job_name_cont" => job_name, "event_id_in" => [event_ids].flatten).result

【讨论】:

以上是关于Rails Ransack gem:使用一个条件搜索多个值的主要内容,如果未能解决你的问题,请参考以下文章

Ransack,搜索多列,一个字段,rails 3

在 Ransack 上为 Rails 设置默认搜索参数

Rails 3.1 Ransack HABTM

Rails,Ransack:如何在 HABTM 关系中搜索“所有”匹配项而不是“任何”匹配项

如何在 Rails 3 中将范围与 Ransack 一起使用?

在rails应用程序中使用Ransack搜索表单中的关联多对多关联