Ваш синтаксис:
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
, кажется, устарел / устарел (см. в этом вопросе ).Вместо этого, возможно, попробуйте что-то вроде:
class Product < ActiveRecord::Base
validates_presence_of :name, :category, :price
def self.search(search)
if search
where('name LIKE ?', "%#{search}%")
else
all
end
end
end
Этот синтаксис where
может требовать или не нуждаться в некоторых играх, поскольку я не проверял это.Кто-то, скорее всего, укажет, если это ошибка.
Кроме того, вы определяете метод search
как:
def self.search(search)
...
end
, что означает, что требуется аргумент search
.Но затем вы проверяете наличие search
здесь:
if search
where('name LIKE ?', "%#{search}%")
else
all
end
, которое на самом деле не имеет смысла, так как требуется search
.Вы должны (1) удалить условие if
или (2) сделать необязательное search
, выполнив:
def self.search(search=nil)
...
end
На основании ваших правок ваш тест "термин в категории" не выполнен, потому что вы 'выполняется только поиск в поле name
, здесь:
where('name LIKE ?', "%#{search}%")
У вас нет продукта с name
подобным «инструментом», поэтому ваш результат - возврат пустого набора результатов - вот чтоошибка говорит вам.
Попробуйте что-то вроде:
where('name LIKE :search OR category LIKE :search', search: "%#{search}%")
Опять же, вам, возможно, придется поиграть с этим синтаксисом.