0

だから、私は名前の付いたルートを持っています:

match 'ip/get/:ip' => 'ip_addresses#show', :via => :get

ご覧のとおり、ip('get'の後)を動的にしたいのですが、試してみるとルーティングエラーが発生し続けます。これが私のルートです:

  root        /                     ip_addresses#index
ip_add POST   /ip/add(.:format)     ip_addresses#create
       GET    /ip/add(.:format)     ip_addresses#new
ip_all GET    /ip/all(.:format)     ip_addresses#index
       GET    /ip/get/:ip(.:format) ip_addresses#show
       DELETE /ip/all(.:format)     ip_addresses#destroy

そして、これが私のshow行動です:

def show
  IpAddress.find(params[:id])
end

編集:ルーティングエラー:

ActionController::RoutingError (No route matches [GET] "/ip/get/1.2.3.4"):

Rails Routingの外部からのガイド(http://guides.rubyonrails.org/routing.html)を読みましたが、当然、何かを見落としている可能性があります。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

2

あなたの質問への答えはあなたが与えた記事にあります。

セクションを見てください:

デフォルトでは、動的セグメントはドットを受け入れません。これは、ドットがフォーマットされたルートの区切り文字として使用されるためです。動的セグメント内でドットを使用する必要がある場合は、これをオーバーライドする制約を追加します。たとえば、:id => / [^ /] + /は、スラッシュ以外のものを許可します。

そこでの例を見てください:

match ':controller(/:action(/:id))', :controller => /admin\/[^\/]+/

したがって、あなたの例では、次のようになると思います。

match 'ip/get/:ip' => 'ip_addresses#show', :id => /[^/]+/ , :via => :get

また、に変更params[:id]しますparams[:ip]

于 2013-03-27T13:17:27.280 に答える