在Ruby on Rails中从控制器中识别和分离GET和POST参数的最简单方法是什么,这相当于PHP中的$ _GET和$ _POST变量?
Joh*_*ley 53
您可以使用request.get?和request.post?方法来区分HTTP Gets和Posts.
Ben*_*eld 27
我不知道Rails中有任何方便的方法,但你可以直接访问查询字符串来解析那里设置的参数.类似于以下内容:
request.query_string.split(/&/).inject({}) do |hash, setting|
key, val = setting.split(/=/)
hash[key.to_sym] = val
hash
end
Run Code Online (Sandbox Code Playgroud)
Rya*_*ton 14
请求对象上有三个非常轻微记录的哈希访问器:
request.query_parameters - 作为查询字符串的一部分发送,即在?之后?request.path_parameters - 通过路由从URL解码,即控制器,动作,idrequest.request_parameters - 所有参数,包括上面以及作为POST主体的一部分发送的任何参数您可以Hash#reject根据需要使用仅限POST的参数.
资料来源:http://guides.rubyonrails.org/v2.3.8/action_controller_overview.html第9.1.1节
我查看了一个旧的Rails 1.2.6应用程序,这些访问器也存在.
如果要检查请求的类型以防止在使用错误的方法时执行任何操作,请注意您也可以在routes.rb文件中指定它:
map.connect '/posts/:post_id', :controller => 'posts', :action => 'update', :conditions => {:method => :post}
Run Code Online (Sandbox Code Playgroud)
要么
map.resources :posts, :conditions => {:method => :post}
Run Code Online (Sandbox Code Playgroud)
现在只有在您有效发布帖子时才会调用PostsController的更新方法.查看资源文档.
GET和POST参数之间存在差异.POST HTTP请求仍然可以具有GET参数.
GET参数是URL查询参数.
POST参数是HTTP请求正文中的参数.
您可以从request.GET和request.POST哈希中单独访问这些内容.