Я играю с виноградным самоцветом и пытаюсь построить API, просто чтобы накормить свое любопытство. Теперь я хочу реализовать функцию, которая позволяет использовать один маршрут для получения списка всех объектов или списка объектов, указанных в теле запроса. Кроме того, я использую Mongoid в качестве картографа данных поэтому я предполагаю, метод должен выглядеть следующим образом: Проверить наличие params в Grape
params do
optional :color, type: String
optional :size, type: Integer
end
get :catalog do
if declared(params)
Product.where declared(params)
else
Product.all
end
end
Но это не работает, ответ всегда возвращает полный список объектов, не представленные в коллекции, независимо от того, что тело запроса данных содержит. Означает ли это, что declared(params)
оценивает по: false
? Но когда я помещаю строки в if
, блок возвращает первую строку как оценку true
.
Можете ли вы объяснить мне, как это работает? И могу ли я реализовать эту функцию с одним маршрутом?
Благодарим вас заблаговременно.
Вы пытаетесь выполнить запрос '' где TRUE', который, очевидно, возвращает все. Вероятно, вы хотите построить запрос типа (в псевдокоде) 'Product.where: color = declare (params) [: color] ...'. – mudasobwa
Откажитесь от того, что действительно 'объявлено (params)' return, оно должно работать * почти *, как вы ожидаете, если я правильно помню. –