在Ruby on Rails中从控制器中识别和分离GET和POST参数的最简单方法是什么,这相当于PHP中的$ _GET和$ _POST变量?
您可以使用request.get?
和request.post?
方法来区分HTTP Gets和Posts.
请参阅http://api.rubyonrails.org/classes/ActionDispatch/Request.html
我不知道Rails中有任何方便的方法,但你可以直接访问查询字符串来解析那里设置的参数.类似于以下内容:
request.query_string.split(/&/).inject({}) do |hash, setting| key, val = setting.split(/=/) hash[key.to_sym] = val hash end
你可以使用:
request.POST
和
request.GET
请求对象上有三个非常轻微记录的哈希访问器:
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应用程序,这些访问器也存在.
如果要检查请求的类型以防止在使用错误的方法时执行任何操作,请注意您也可以在routes.rb文件中指定它:
map.connect '/posts/:post_id', :controller => 'posts', :action => 'update', :conditions => {:method => :post}
要么
map.resources :posts, :conditions => {:method => :post}
现在只有在您有效发布帖子时才会调用PostsController的更新方法.查看资源文档.
GET和POST参数之间存在差异.POST HTTP请求仍然可以具有GET参数.
GET参数是URL查询参数.
POST参数是HTTP请求正文中的参数.
您可以从request.GET和request.POST哈希中单独访问这些内容.