2016-01-12 4 views
1

У меня есть таблица под названием игрушки, что имеет столбцы toy_id, company_id, store_id, name and descriptionRails .где запрос, не работает

Я пытаюсь сделать запрос на стол, как в следующем: toys = @company.toys.where("store_id = ? AND (name LIKE ? OR description LIKE ?)", params[:store_id], params[:query], params[:query]

Идея заключается в том, если пользователь идет по следующему адресу: https://myapp.com/api/toys/search?store_id=8&query="robot", что он вернет все игрушки для магазина, обозначенные store_id, которые имеют name или description LIKE robot. Каждый раз он возвращает пустой JSON. Не совсем понятно почему? Любая помощь или руководство будут оценены.

+1

попробуйте это 'игрушки = @ company.toys.where (" store_id =? AND (имя LIKE? ИЛИ описание LIKE?) ", Params [: store_id],"% # {params [: query]}% ", "% # {params [: query]}%" '. –

+0

Если я не ошибаюсь, это уязвимо для SQL-инъекций. –

+1

'? 'в том, где позаботится о дезинфекции –

ответ

0

См первый комментарий в оригинальный вопрос по @PardeepDhingra

toys = @company.toys.where("store_id = ? AND (name LIKE ? OR description LIKE ?)", params[:store_id], "%#{params[:query]}%", "%#{params[:query]}%" 
1

Использование стиля Арел:

companies = Company.arel_table 

toys = @company.where(store_id: params[:store_id]).where(companies[:name].matches(params[:query]).or(companies[:description].matches(params[:query]))) 

Или даже:

companies = Company.arel_table 

search_query = companies[:name].matches(params[:query]).or(companies[:description].matches(params[:query])) 

toys = @company.where(store_id: params[:store_id]).where(search_query) 
+0

Я попробую –

1

As You «есть таблица «Игрушки», вы можете попробовать что-то вроде этого:

@toys = Toy.where("company_id = ? AND store_id = ? AND (name LIKE ? OR description LIKE ?)", params[:company_id], params[:store_id], params[:query], params[:query] 

Я надеюсь, что это поможет вам!