Подтвердить что ты не робот

Определите параметры GET и POST в Ruby on Rails

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

4b9b3361

Ответ 1

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

request.query_string.split(/&/).inject({}) do |hash, setting|
  key, val = setting.split(/=/)
  hash[key.to_sym] = val
  hash
end

Ответ 3

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

request.POST

и

request.GET

Ответ 4

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

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

Вы можете использовать Hash#reject, чтобы перейти к параметрам POST-only при необходимости.

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

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

Ответ 5

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

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

или

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

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

Ответ 6

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

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

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

вы можете получить доступ к ним отдельно от запросов request.GET и request.POST.

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

Я думаю, о чем говорит Джесси Рейс, это ситуация, когда в вашем routes.rb файле есть

post 'ctrllr/:a/:b' => 'ctrllr#an_action'

а вы POST на "/ctrllr/foo/bar? a = not_foo" значения POST {'a' = > 'still_not_foo'}, у вас будет три разные значения 'a': 'foo', 'not_foo' и 'still_not_foo'

'params' в контроллере будет иметь значение 'a' для 'foo'. Чтобы найти "a", установленный в "not_foo" и "still_not_foo", вам нужно изучить request.GET и request.POST

Я написал драгоценный камень, который различает эти разные пары ключей = > значение https://github.com/pdxrod/routesfordummies.

Ответ 11

if request.query_parameters().to_a.empty?