0

私はルートを使用しています:

  match ':controller(/:action(/:id))', :constraints => {:id => /.*/, :controller => /[a-z]$/}
  match ':controller', :to => :index, :constraints => {:controller => /[a-z]/}
  get ':id' => 'user#show', :constraints => {:id => /.+/}

そして、私がrake show routesを実行すると、次のようになります。

 /:controller(/:action(/:id))(.:format) {:id=>/.*/}
 /:controller(.:format) :controller#index
 GET /:id(.:format)         user#show {:id=>/.+/}

:controllerの制約は表示されていません。

私の目標は、「M.Bovary」が'/ user / show /'、:id=>'Mにルーティングするようにリクエストすることです。ボヴァリー」。現在、IDはまったく渡されず、Mcontroller#indexにルーティングされています。"/ m" => "MController#index"

レールは制約の最初の部分と一致していて、残りの引数を「破棄」しているように見えます。制約は^または$または\Zを無視しているように見えるので、それはオプションではありません。

4

1 に答える 1

0

Frederick Cheungは上記のコメントで答えを得ましたが、彼はここにそれを追加しないので、この古い質問を閉じます。

URLには「。」があるので その中で、レールはそれが延長であると混乱しています。形式を指定して支援します。

match ':controller(/:action(/:id))', :constraints => {:id => /.*/,
 :controller => /[a-z]$/, :format => /(html|js)/}
于 2013-08-27T04:43:46.087 に答える