2012-03-21 9 views
0

私はRails 2アプリケーションをRails 3にアップグレードしようとしています。本当にルートに問題があります。 // localhostを:3000 /プロファイル/ MYUSERNAME、それが正しく追加されません:paramsハッシュにログインここで私はのhttpに行くとき、私はroutes.rbをファイルRails 3のパスパラメータがパラメータの一部ではない

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

に持っているものです。ここをクリック:

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"} 

何らかの理由で、:loginは通常のパラメータの一部ではありません。直感で、私はrequest.envを検査し、この発見:私は完全にこの時点で困惑

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

を。何か不足していますか?私はここで何が起こっているのか把握するためにどこを見なければならないのですか?

更新

私は削除する宝石で遊んで開始し、これは魔法のように働きました。私はちょうど私がホームページをロードするために必要な絶対最小限のセットを得るまで、Gemfileからの宝石をコメントアウトしました。その時点で、パラメータはまったく同じであった。その後、私は原因を見つけるために一度にいくつかの宝石を戻しました。私はすべてを戻して...それは今働く。クレイジーですが、それが何であれ、私は推測します。

答えて

1

'match'と 'get'の構文を混在させているようです。試してみてください:あなたのconfig/routes.rbを

+0

提案していただきありがとうございますが、私は 'get'と 'match'とさまざまなオプションをミックスして試してみました。 – Micah

+0

rakeルートの出力を質問に追加できますか?おそらくあなたがチェックしたが、私はいくつかのルートの競合を考えている。 – jeffersongirao

+0

私は、路線全体の出力を投稿するのは少しパラノイ(恥ずかしい)です。 Rails 2からRails 3に自動的に変換されたことを考えると、特に醜いです。 "profile"で始まる唯一のルートは私が欲しいルートですが、私は自信を持って言うことができます。そして、ログから、私はそれが正しい動作に向かうことを知ることができます。単に渡すことはありません:params要素としてのログイン。 – Micah

0

私はルートを定義するとき、私は常にリソース(複数可)を使用したURLのparamsを使用したいにおける

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

それとも

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

。これはRails 3.xのコンベンションで、試してみることができます。

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

これは、リソースURLを定義するのに役立つはずです。このような

0

何かが表示されない場合は、その競合あなたのルート・ファイル内の他の何かがあるかもしれません

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

を動作するはずです。 match ':controller(/:action(/:id(.:format)))'(または同様の「すべて一致する」ルート)がルートファイルの一番下にあることを確認してください。

関連する問題