Мне просто интересно, возможно ли иметь условие, которое передает информацию в тело запроса, как только оно выполнено, я сомневаюсь, что условия могут сделать это и являются правильным местом, даже если бы они могли, потому что это подразумевает, что они должны делать условная логика, однако пример авторизации также перенаправляет, поэтому у него есть проблемы с размышлениями ... пример будет выглядеть примерно так:
set(:get_model) { |body| { send_to_request_body(Model.new(body)) } }
get '/something', :get_model => request.body.data do
return "model called #{@model.name}"
end
Выше приведен псевдокод, поэтому извините за любые синтаксические / орфографические ошибки, но идея в том, что у меня может быть условие, которое выбирает модель и помещает ее в некоторую локальную переменную для использования телом, или останавливает работу с ошибкой или что-то.
Я уверен, что фильтры (до / после) были бы лучшим способом сделать это, если бы это можно было сделать, однако из того, что я видел, мне нужно было бы установить это для маршрута, тогда как с условием, которое мне понадобилось бы только иметь его в качестве опции по запросу.
Пример с before будет:
before '/something' do
@model = Model.new(request.body.data)
end
get '/something' do
return "model called #{@model.name}"
end
Это замечательно, но, скажем, у меня теперь было 20 маршрутов, и 18 из них требовалось создать эти модели, мне нужно было бы в основном продублировать фильтр before для всех 18 и написать одинаковую логику модели для всех них, Вот почему я пытаюсь найти лучший способ повторно использовать эту функцию. Если бы я мог сделать фильтр всеохватывающего до, который смог бы проверить, есть ли у заданного маршрута установленный параметр, то это могло бы сработать, но не уверен, что вы можете это сделать.
В ASP MVC вы могли бы делать такие вещи с фильтрами, а это то, чем я в идеале буду заниматься, каким-то образом настраивать определенные маршруты (в определении маршрута), чтобы выполнить некоторую работу заранее и передать ее в вызывающий блок.