#ruby-on-rails
#ruby-on-rails
Вопрос:
Я внедряю сторонний API для Shipworks на сервере Rails, и клиентское приложение Shipworks публикует action
параметр с семантикой, специфичной для Shipworks.
Однако логика маршрутизации Rails перезаписывает этот параметр в качестве имени метода контроллера.
Есть ли пользовательский маршрут, который я мог бы написать, чтобы получить значение этого параметра действия без его перезаписи в качестве имени моего метода контроллера?
Ответ №1:
Сегодня я попал в эту ловушку и пришел с этим решением в методе контроллера. Это Rails 4.1:
if request.method == "POST"
action = request.request_parameters['action']
else
action = request.query_parameters['action']
end
Комментарии:
1. Ты спас меня! Спасибо
Ответ №2:
Я понял это. В raw_post
AbstractRequest есть метод.
Итак, вы можете сделать это для анализа необработанных параметров post:
def raw_post_to_hash
request.raw_post.split(/amp;/).inject({}) do |hash, setting|
key, val = setting.split(/=/)
hash[key.to_sym] = val
hash
end
end
а затем просто вызовите raw_post_to_hash[:action], чтобы получить доступ к исходному параметру действия или любому другому параметру. Вероятно, есть более простой способ.
Комментарии:
1. Почему бы не использовать
Rack::Utils.parse_nested_query
для разбора этой строки?