搜查搜索如何对数组列表进行搜索?

How does ransack search works on an array list?

我正在使用 Rails 4.2.5,Ruby 2.2,搜索。 我正在尝试使用 Ransack 实现搜索功能。我有类似的东西:

emails = ["abc@abc.com", "a@a.com", "b@b.com"]
users_list = emails.map{|a| User.where(email: a).first}
checked_in_users = Kaminari.paginate_array(users_list)

这为我提供了页面中正确的用户列表。但是,如果我想通过电子邮件搜索,我该怎么办?

@q = checked_in_users.ransack params[:q]

这给了我:

"NoMethodError (undefined method `ransack' for #<Array"

HAML 代码:

= search_form_for [@q], url: users_path(some_id: id) do |form|
  = form.text_field :user_name_or_user_email_cont, placeholder: 'Name or email', class: 'form-control'

正确的搜查方法是什么?

如果你想搜索整个用户列表,你可以这样做:

@q = User.ransack(params[:q])
@users = @q.result.page(params[:page])

您想在添加分页之前对您的模型调用 ransack。获得搜索结果后,您可以添加分页。文档的这一部分向您展示 how to handle pagination with ransack. In its most basic form, this is how you can use ransack.


此外,您的示例中似乎有一些奇怪的代码。如果我误解了你的意思,我深表歉意。

当您调用 emails.map{|a| User.where(email: a).first} 时,您在本例中进行了 3 次 where 查询并返回了一个包含 3 个模型的数组。 Ransack 不会对该数组进行操作。

对于你的情况,我会把它改成这样:

emails = ["abc@abc.com", "a@a.com", "b@b.com"]
@q = User.where(email: emails).ransack(params[:q])
@checked_in_users = @q.result.page(params[:page])

只知道您将搜索电子邮件地址为 "abc@abc.com"、"a@a.com" 和 "b@b.com" 的一组用户。如果您使用搜查表搜索 "bob@example.com",您不会得到任何搜索结果。这可能不是你想要的。