【问题标题】:Ransack search errorRansack 搜索错误
【发布时间】:2018-01-16 05:34:29
【问题描述】:

我正在使用 Rails 4.2.5、Ruby 2.2、ransack。我正在尝试使用 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):

不知道为什么会出现这个错误。

【问题讨论】:

    标签: ruby-on-rails-4 ransack


    【解决方案1】:

    由于您要搜索用户,我认为您可以去掉文本字段上的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_namelast_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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-23
      • 2014-10-14
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多