#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%")