2012-05-07 13 views
1

Iはapp/views/layouts/application.html.erbでレール3にレール2からルーティングレール3ルーティング:非CRUDコントローラ

変換してヘルプのビットを必要とする、私は:

<%= link_to "Reports", reports_path %><br> 

ReportsControllerがあり、そしてapp/views/reports/index.html.erbで、私はこれを持っている:

<%= link_to "Clients With Animals", :action => "getAnimals", :controller => "clients" %> 

次に、設定/ routes.rbをして、私はこの(Railsの3)

match '/reports' => "reports#index" 
match '/clients/getAnimals', to: "clients#getAnimals" 

私はレポートのページの「getAnimals」リンクをクリックしたとき、私はこのエラーを取得:

ActiveRecord::RecordNotFound in ClientsController#show 
Couldn't find Client with id=getAnimals 

私は「getAnimalsは」IDにしたくない - 私はそれが行動になりたいです代わりに。

どうすればよいですか?

+0

*あなたがroutes.rb' 'を持っているん*他に何が? URLにマッチする*/clients/getAnimalsの一致するものが*前にありますか?クライアントリソースなどと同様? –

答えて

2

また、resources :clientsのエントリがあると仮定すると、match '/clients/getAnimals', to: "clients#getAnimals"がそれよりも上になるようにしたい(Railsは最初にヒットしたものと一致します)。

しかし、より良い方法は、リソースにそれを置くことであり得る:

resources :clients do 
    get 'getAnimals', :on => :collection 
end 
+0

@dave_newtonとDylan、ありがとうございました。 Daveの質問は完全に密接なものでした。リソースがありました。「/ clients/getAnimals」の上にあるクライアントなので、それは一致していました。 Dylanの提案はうまくいっています。私は2番目の方法を使ってリソースに入れています。とても素早く答えることに感謝します。 – sploiber

+0

私はこの他の1つの質問があります。 Rails 2では、map.connect '/ reports'、:controller => "reports"を実行することができ、getAnimalsなどのアクションをレポートのインデックスに送信します。 Rails 3では、これを一般的に行う方法があるのですか、またはリソースごとにそれぞれの特定のアクションをリストアップする必要がありますか:クライアント? – sploiber

+0

'/ reports/getAnimals'や'/reports/forAnimal 'のようなものを許可する 'match'レポート(/:action(/:id))(:format) '=>' reports '/40'など –

関連する問題