Rails:按对象属性搜索(User,admin:true),返回PG :: UndefinedColumn:ERROR

时间:2016-10-27 15:53:55

标签: ruby-on-rails search

我正在尝试在coach_index中创建搜索。用户有一个布尔管理属性,用于确定他们是否是教练。教练索引显示全部Users.where(admin: true)。我正在尝试创建一个搜索教练但铁路不断返回错误...

PG::UndefinedColumn: ERROR: column users.conditions does not exist LINE 1: ...rs".* FROM "users" WHERE "users"."admin" = $1 AND "users"."c... ^ : SELECT "users".* FROM "users" WHERE "users"."admin" = $1 AND "users"."conditions" IN ('username LIKE ? OR city LIKE ? OR state LIKE ? OR zip LIKE ? OR first_name LIKE ? OR last_name LIKE ?', '%asdf%', '%asdf%', '%asdf%', '%asdf%', '%asdf%', '%asdf%') LIMIT $2 OFFSET $3

模型/ user.rb

  def self.search_coach(search)
    if search
      where(admin: true, conditions: ['username LIKE ? OR city LIKE ? OR state LIKE ? OR zip LIKE ? OR first_name LIKE ? OR last_name LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%"] )
    else
      where(admin: true)
    end
  end

的观点/用户/ coach_index.html.erb

<div class="input-group" style="margin: auto">
  <%= form_tag coach_index_users_path, method: 'get', class: 'navbar-form', role: 'search', id: "search-form" do %>
    <span class="input-group-btn">
      <%= submit_tag "Search", name: nil, class: 'btn btn-default' %>
      <%= text_field_tag :search, "", placeholder: "Search coaches", class: 'form-control' %>
    </span>
  <% end %>
</div>

users_controller.rb

  def coach_index
    @coaches = User.search_coach(params[:search]).page(params[:page]).per_page(10)
    @hash = Gmaps4rails.build_markers(@coaches) do |coach, marker|
      marker.lat coach.latitude
      marker.lng coach.longitude
      marker.infowindow "#{coach.first_name}#{coach.last_name} (#{coach.username}) | <a href=mailto:#{coach.email}>#{coach.email}</a> | #{coach.city}, #{coach.state} #{coach.zip}"
    end
  end

我陷入了撬中,看起来搜索正在找回错误的对象,但我不确定原因。

     4: def coach_index
     5:   @coaches = User.search_coach(params[:search]) #.page(params[:page]).per_page(10)
 =>  6:   binding.pry
     7:   @hash = Gmaps4rails.build_markers(@coaches) do |coach, marker|
     8:     marker.lat coach.latitude
     9:     marker.lng coach.longitude
    10:     marker.infowindow "#{coach.first_name}#{coach.last_name} (#{coach.username}) | <a href=mailto:#{coach.email}>#{coach.email}</a> | #{coach.city}, #{coach.state} #{coach.zip}"
    11:   end
    12: end

[1] pry(#<UsersController>)> @coaches
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."admin" = $1 AND "users"."conditions" IN ('username LIKE ? OR city LIKE ? OR state LIKE ? OR zip LIKE ? OR first_name LIKE ? OR last_name LIKE ?', '%Mariela%', '%Mariela%', '%Mariela%', '%Mariela%', '%Mariela%', '%Mariela%')  [["admin", true]]
=> #<User::ActiveRecord_Relation:0x3fe8fa4f3be8>
[2] pry(#<UsersController>)> @coaches.class
=> User::ActiveRecord_Relation
[3] pry(#<UsersController>)>

1 个答案:

答案 0 :(得分:1)

试试这个:

def self.search_coach(search)
  if search
    where('admin AND (username LIKE ? OR city LIKE ? OR state LIKE ? OR zip LIKE ? OR first_name LIKE ? OR last_name LIKE ?)', "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%" )
  else
    where(admin: true)
  end
end

这可能是因为有效记录认为condition就像您的表格属性中的admin一样。