1

:idシナリオ:またはで誰かを検索できる URL パスが必要です:name:。すべてが同じユーザーを指している
場合user/5/user/tom

ルート.rb

controller 'user' do  
    get 'user/:id'  
    get 'user/:name'  
end 

テスト/ルート/user_routes.rb

test "/user/:id" do  
  assert_routing "/user/5", :controller => "user", :action => "find_by_id", :id=>"5"  
end  

test "/user/:name" do  
  assert_routing "/user/tom", :controller => "user", :action => "find_by_name", :name=>"tom"  
end 

これが URL パスに関する正しい設計上の決定であるかどうかは正確にはわかりません。
ガイダンスを探しています

4

1 に答える 1

2

Railsルートはuser/15のようなURLに名前またはIDがあるとは言えないため、指定したルートがあいまいであるため、あなたがしていることはうまくいかないと思います。

もちろん、正規表現を指定してこれを行う方法があります。id は常に数値なので、正規表現でチェックできます

controller 'user' do  
    get 'user/:id', :id => /\d+/
    get 'user/:name', :name => /[A-Za-z][\w\s]+/
end 

上記のステートメントは、正規表現の制約を設定します。コントローラーで次のように確認できます

if params[:id]
# Get by id
else
# Get by name

get パラメーターを渡してコントローラーで同じ方法で処理することでも、これを行うことができます。

ありがとう

于 2012-09-20T19:19:03.887 に答える