Rails 3路径参数不是params的一部分

时间:2012-03-21 01:59:15

标签: ruby-on-rails ruby-on-rails-3

我正在尝试将Rails 2应用程序升级到Rails 3,而我确实遇到了路由问题。这是我在routes.rb文件中的内容

get 'profile/:login' => 'account#profile', :as => :profile

当我转到 http:// localhost:3000 / profile / MyUsername 时,它没有正确添加:登录到params哈希。见这里:

Started GET "/profile/MyUsername?foo=bar" for 127.0.0.1 at Tue Mar 20 21:39:03 -0400 2012
  Processing by AccountController#profile as HTML
  Parameters: {"foo"=>"bar"}

出于某种原因,:登录不是常规参数的一部分。在预感中,我检查了 request.env ,发现了这个:

action_dispatch.request.path_parameters"=>{:action=>"profile", :controller=>"account", :login=>"MyUsername"}

我完全被这一点困扰了。我错过了什么吗?我应该在哪里看一下这里发生了什么?

更新

我开始玩去除宝石,这神奇地工作了。我刚刚从Gemfile中注释掉了宝石,直到我得到加载主页所需的绝对最小集合。那时,参数完全如预期的那样。然后我一次又添加几个宝石以找到原因。我把所有东西都添加回去了......现在就可以了。疯狂,但无论如何,我想。

3 个答案:

答案 0 :(得分:1)

看起来您将'match'的语法与'get'混合在了一起。请尝试:

match 'profile/:login' => 'account#profile', :as => :profile, :via => :get

或者

get 'profile/:login', :to => 'account#profile', :as => :profile
你的config / routes.rb中的

答案 1 :(得分:0)

当我想使用URL参数时,我总是在定义路径时使用资源。这是Rails 3.x的惯例,所以你可以试试。

  resources :accounts , :exclude => :all do
    member do
      get  :profile
    end
  end

这应该有助于或任何其他方式来定义资源URL。

答案 2 :(得分:0)

这样的事情应该有效

match 'profile(/:login)' => "account#profile", :as => :profile

如果没有,您的路线文件中可能还有其他内容存在冲突。确保任何match ':controller(/:action(/:id(.:format)))'(或类似的“匹配所有”路由)位于路径文件的最底部。