Определите параметры GET и POST в Ruby on Rails - PullRequest
29 голосов
/ 30 сентября 2008

Какой самый простой способ определить и отделить параметры GET и POST от контроллера в Ruby on Rails, который будет эквивалентен переменным $ _GET и $ _POST в PHP?

Ответы [ 11 ]

53 голосов
/ 30 сентября 2008

Вы можете использовать методы request.get? и request.post? для различения HTTP-запросов и сообщений.

27 голосов
/ 30 сентября 2008

Я не знаю каких-либо удобных методов в Rails для этого, но вы можете получить доступ к строке запроса напрямую, чтобы проанализировать параметры, которые там установлены. Примерно так:

request.query_string.split(/&/).inject({}) do |hash, setting|
  key, val = setting.split(/=/)
  hash[key.to_sym] = val
  hash
end
16 голосов
/ 03 декабря 2011

Вы можете сделать это, используя:

request.POST

и

request.GET

14 голосов
/ 06 марта 2012

Для объекта запроса есть три очень легко документированных метода доступа к хешу:

  • request.query_parameters - отправляется как часть строки запроса, т. Е. После?
  • request.path_parameters - декодируется из URL через маршрутизацию, т.е. контроллер, действие, id
  • request.request_parameters - Все параметры, включая вышеприведенные, а также любые отправленные как часть тела POST

Вы можете использовать Hash#reject для доступа к параметрам только для POST.

Источник: http://guides.rubyonrails.org/v2.3.8/action_controller_overview.html раздел 9.1.1

Я посмотрел старое приложение на Rails 1.2.6, и эти средства доступа существовали и тогда.

6 голосов
/ 30 сентября 2008

Если вы хотите проверить тип запроса, чтобы предотвратить какие-либо действия при использовании неправильного метода, имейте в виду, что вы также можете указать его в своем файле rout.rb:

map.connect '/posts/:post_id', :controller => 'posts', :action => 'update', :conditions => {:method => :post} 

или

map.resources :posts, :conditions => {:method => :post} 

Метод обновления вашего PostsController теперь будет вызываться только тогда, когда у вас фактически есть сообщение. Проверьте документ для ресурсов .

5 голосов
/ 01 апреля 2011

Существует различие между параметрами GET и POST. HTTP-запрос POST может по-прежнему иметь параметры GET.

GET-параметры - это параметры URL-запроса.

Параметры POST - это параметры в теле HTTP-запроса.

вы можете получить к ним доступ отдельно от request.GET и request.POST хэшей.

4 голосов
/ 12 сентября 2016

request.get? вернет логическое значение true, если это метод GET,

request.post? вернет логическое значение true, если это метод POST,

2 голосов
/ 30 сентября 2008

Вам не нужно знать этот уровень детализации в контроллере. Ваши маршруты и формы приведут к добавлению соответствующих элементов в хэш параметров. Затем в контроллере вы просто говорите «1001», чтобы получить параметр foo и делать с ним все, что вам нужно.

Отображение между GET и POST (и PUT и DELETE) и действиями контроллера установлено в config/routes.rb в большинстве современных кодов Rails.

1 голос
/ 30 сентября 2008

Я думаю, то, что вы хотите сделать, не очень "Rails", если вы понимаете, о чем я. Ваши GET-запросы должны быть idempotent - вы должны иметь возможность отправлять один и тот же GET-запрос много раз и каждый раз получать один и тот же результат.

0 голосов
/ 20 апреля 2013
if request.query_parameters().to_a.empty?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...