Каков самый простой способ определить и отделить параметры GET и POST от контроллера в Ruby on Rails, который будет эквивалентен переменным $_GET и $_POST в PHP?
Определите параметры GET и POST в Ruby on Rails
Ответ 1
Я не знаю никаких удобных методов в Rails для этого, но вы можете получить доступ к querystring напрямую, чтобы проанализировать параметры, которые там установлены. Что-то вроде следующего:
request.query_string.split(/&/).inject({}) do |hash, setting|
key, val = setting.split(/=/)
hash[key.to_sym] = val
hash
end
Ответ 2
Вы можете использовать методы request.get?
и request.post?
, чтобы различать HTTP Gets и Posts.
Ответ 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?