搜查错误
Ransack search error
我正在使用 Rails 4.2.5,Ruby 2.2,搜索。我正在尝试使用 Ransack 实现搜索功能。我有类似的东西:
这些代码在 abc_controller.rb:
def checked_users
emails = ["abc@abc.com", "a@a.com", "b@b.com"]
users_list = User.where("email in (?)", emails)
@q = users_list.ransack params[:q]
end
这些是checked_users.html.haml中的代码:(忽略这里的url路径。它是正确的,现在我已经改变了它)
= search_form_for @q, url: checked_users_path(some_id: id) do |form|
= form.text_field :user_name_or_user_email_cont, placeholder: 'Name or email', class: 'form-control'
在routes.rb中:
resources :xyz do
resources :mno do
get 'checked_users', controller: 'abc', action: 'checked_users'
end
end
使用这些代码时出现错误:
ActionView::Template::Error (undefined method `user_name_or_user_email_cont' for Ransack::Search<class: User, base: Grouping <combinator: and>>:Ransack::Search):
不确定为什么会出现此错误。
既然你在搜索用户,我想你可以去掉文本字段上的 user
前缀。
例如,您有:
form.text_field :user_name_or_user_email_cont, placeholder: 'Name or email', class: 'form-control'
将其更改为这样的内容应该可行:
form.text_field :name_or_email_cont, placeholder: 'Name or email', class: 'form-control'
此外,如果可以的话,我会考虑使用 ransack 的 search_field
而不是 text_field
。
这里有一些额外的信息。我相信如果你想搜索关联,你只需要使用像 user
这样的前缀。例如,假设您有这样的用户和玩具模型:
class User
# attribute: first_name, String
# attribute: last_name, String
has_many :toys
end
class Toy
# attribute: name, String
end
现在,您可以对用户或用户的玩具进行搜查。以下是使用 search_field
执行此操作的方法。在这种情况下,first_name
和 last_name
指的是用户,toys_name
指的是玩具的名称。
form.search_field :first_name_or_last_name_or_toys_name_cont, placeholder: "First Name, Last Name, or Toy's Name", class: 'form-control'
我正在使用 Rails 4.2.5,Ruby 2.2,搜索。我正在尝试使用 Ransack 实现搜索功能。我有类似的东西:
这些代码在 abc_controller.rb:
def checked_users
emails = ["abc@abc.com", "a@a.com", "b@b.com"]
users_list = User.where("email in (?)", emails)
@q = users_list.ransack params[:q]
end
这些是checked_users.html.haml中的代码:(忽略这里的url路径。它是正确的,现在我已经改变了它)
= search_form_for @q, url: checked_users_path(some_id: id) do |form|
= form.text_field :user_name_or_user_email_cont, placeholder: 'Name or email', class: 'form-control'
在routes.rb中:
resources :xyz do
resources :mno do
get 'checked_users', controller: 'abc', action: 'checked_users'
end
end
使用这些代码时出现错误:
ActionView::Template::Error (undefined method `user_name_or_user_email_cont' for Ransack::Search<class: User, base: Grouping <combinator: and>>:Ransack::Search):
不确定为什么会出现此错误。
既然你在搜索用户,我想你可以去掉文本字段上的 user
前缀。
例如,您有:
form.text_field :user_name_or_user_email_cont, placeholder: 'Name or email', class: 'form-control'
将其更改为这样的内容应该可行:
form.text_field :name_or_email_cont, placeholder: 'Name or email', class: 'form-control'
此外,如果可以的话,我会考虑使用 ransack 的 search_field
而不是 text_field
。
这里有一些额外的信息。我相信如果你想搜索关联,你只需要使用像 user
这样的前缀。例如,假设您有这样的用户和玩具模型:
class User
# attribute: first_name, String
# attribute: last_name, String
has_many :toys
end
class Toy
# attribute: name, String
end
现在,您可以对用户或用户的玩具进行搜查。以下是使用 search_field
执行此操作的方法。在这种情况下,first_name
和 last_name
指的是用户,toys_name
指的是玩具的名称。
form.search_field :first_name_or_last_name_or_toys_name_cont, placeholder: "First Name, Last Name, or Toy's Name", class: 'form-control'