Как не использовать параметр действия Rails в контроллере

#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 для разбора этой строки?