搜查搜索如何对数组列表进行搜索?
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",您不会得到任何搜索结果。这可能不是你想要的。
我正在使用 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",您不会得到任何搜索结果。这可能不是你想要的。