Rails3: Поиск пользователей по второму над именем?

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я хочу написать простой метод поиска в моей пользовательской модели, где он проверяет наличие второго имени и first name и возвращает соответствующих пользователей. На данный момент у меня есть это, но выдает ошибку:

   def self.search(search)
    if search
      where("first_name like ? or second_name like ?", "%#{search}%")
    else
      all
    end
  end
  

ошибка заключается в: wrong number of bind variables (1 for 2) in: first_name like ? or second_name like ?

Как я могу это исправить?

Спасибо

Комментарии:

1. я предполагаю, что вам понадобится def self.search(first,last) , а затем поместите оба этих параметра в свой dohickey в конце вашего where предложения. На самом деле не знаю Rails, но именно с этого я бы начал.

Ответ №1:

У вас есть два, ? что означает, что where метод ожидает два аргумента:

 def self.search(search)
  if search
    where("first_name like ? or second_name like ?", "%#{search}%", "%#{search}%")
  else
    all
  end
end
  

Я не уверен, что вы можете упростить эти like параметры, чтобы использовать один аргумент вместо двух повторяющихся, но вы могли бы немного его почистить:

 def self.search(search)
  if search
    q = "%#{search}%"
    where("first_name like ? or second_name like ?", q, q)
  else
    all
  end
end
  

Комментарии:

1. это не работает, я не думаю, что это должно быть помечено как true.

Ответ №2:

Вы можете использовать

 where("first name like :name or second name like :name", :name => "%foo%")