2013-08-26 13 views
5

は、ここに私のルートはここRailsは私のルートの一部の名前を付けているのはなぜですか?

a_b GET /a/b(.:format)   a#b 
    GET /a/z/:something(.:format) a#z 

うわーそれは吸うrake routes

の出力だ

Dumb::Application.routes.draw do 

    # an auto-named route 
    get '/a/b',   to: 'a#b' 

    # apparently not auto-named??? 
    get '/a/z/:something', to: 'a#z' 

end 

ファイルです!少なくとも一貫性のために。私が表示されます

get '/a/z/:something', to: 'a#z', as: "a_z" 

rake routesa#zルートを変更した場合

a_b GET /a/b(.:format)   a#b 
a_z GET /a/z/:something(.:format) a#z 

[OK]を、それは良いことだが、それは迷惑であるように、ルートに名前を持ちます。

これは唯一の解決策ですか?

+0

私は間違っているかもしれませんが、ルーティングテーブルは、ルートが動作するのに十分単純な場合にのみ自動的に名前を割り当てます。パラメータを追加すると混乱することがあります。 – tadman

答えて

2

Railsはルートを理解できないため、ルートに名前を割り当てることはできません。通常、次のようなあなたのルートを書きたいでしょう:

/a/:id/b/:id # instead of /a/b/:id which Rails does not understand. 

Railsは、ID :idを持つ別のモデルインスタンスを持つ別のコントローラへのid :idbとモデルのインスタンスを持つコントローラにaをマッピングします。

/a/b/:idは、Rails規約では何も参照していません。

a_bという名前は、Railsが作成したものですが、それはうまくいかなかったのですが、GET /a/z/:somethingを解決できません。それはどうなりますか? a_z_something

関連する問題