开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜