Why is `request.method` returning a string (instead of a symbol)?
I thought request.method
is supposed to return a symbol like 开发者_开发技巧:get
, :put
etc. ?
But instead in the controller action, I am getting GET
as a String!
Am I doing something wrong?
In routes.rb
:
resources :posts
member do
get 'some_action'
end
end
In a view .erb:
<%= link_to "Some Action",some_action_post_path %>
In PostsController
:
def some_action
p request.method # => "GET"
p request.method.class.name # => "String"
if request.method == :get
#does not get called
end
end
Ps. I'm using Rails 3.0.3 on Ruby 1.8.7 p330
Works as designed - it is supposed to return a string :) So, use the string. Different topic: you can convert between strings and syms with to_s and to_sym, respectively.
For anyone coming at this question while converting from Rails 2.x, it's worth noting that the request.method call used to return symbols.
Old question, but we also have these now:
request.method_symbol
(http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-method_symbol)request.request_method_symbol
(http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-request_method_symbol)
If you just want to know if it is a certain verb, you can use query methods like this:
request.get?
request.post?
etc
精彩评论