在Ruby on Rails中从控制器中识别和分离GET和POST参数的最简单方法是什么,这相当于PHP中的$ _GET和$ _POST变量?
答案 0 :(得分:53)
您可以使用request.get?
和request.post?
方法来区分HTTP获取和帖子。
答案 1 :(得分:27)
我不知道Rails中有任何方便的方法,但你可以直接访问查询字符串来解析那里设置的参数。如下所示:
request.query_string.split(/&/).inject({}) do |hash, setting|
key, val = setting.split(/=/)
hash[key.to_sym] = val
hash
end
答案 2 :(得分:16)
您可以使用以下方式执行此操作:
request.POST
和
request.GET
答案 3 :(得分:14)
请求对象上有三个非常轻微记录的哈希访问器:
request.query_parameters
- 作为查询字符串的一部分发送,即在?request.path_parameters
- 通过路由从URL解码,即controller,action,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应用程序,这些访问器也存在。
答案 4 :(得分:6)
如果要检查请求的类型以防止在使用错误的方法时执行任何操作,请注意您也可以在routes.rb文件中指定它:
map.connect '/posts/:post_id', :controller => 'posts', :action => 'update', :conditions => {:method => :post}
或
map.resources :posts, :conditions => {:method => :post}
现在只有在您有效发布帖子时才会调用PostsController的更新方法。查看resources的文档。
答案 5 :(得分:5)
GET和POST参数之间存在差异。 POST HTTP请求仍然可以有GET参数。
GET参数是URL查询参数。
POST参数是HTTP请求正文中的参数。
你可以从request.GET和request.POST哈希中单独访问它们。
答案 6 :(得分:4)
request.get?
将返回布尔值true,
request.post?
将返回布尔值true,
答案 7 :(得分:2)
您无需知道控制器中的详细程度。您的路由和表单将导致将相应的项添加到params哈希。然后在控制器中,您只需访问说params[:foo]
以获取foo参数,并使用它执行任何操作。
在大多数现代Rails代码中,config/routes.rb
中设置了GET和POST(以及PUT和DELETE)和控制器操作之间的映射。
答案 8 :(得分:1)
如果你知道我的意思,我认为你想要做的不是“Rails”。您的GET请求应该幂等 - 您应该能够多次发出相同的GET请求并且每次都获得相同的结果。
答案 9 :(得分:0)
我认为Jesse Reiss正在谈论的是你的routes.rb
档案中的情况
post 'ctrllr/:a/:b' => 'ctrllr#an_action'
你发布到“/ 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
我写了一个gem来区分https://github.com/pdxrod/routesfordummies处的这些不同的key =>值对。
答案 10 :(得分:0)
if request.query_parameters().to_a.empty?