我正在尝试将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中注释掉了宝石,直到我得到加载主页所需的绝对最小集合。那时,参数完全如预期的那样。然后我一次又添加几个宝石以找到原因。我把所有东西都添加回去了......现在就可以了。疯狂,但无论如何,我想。
答案 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)))'
(或类似的“匹配所有”路由)位于路径文件的最底部。