2012-05-07 8 views
1

мне нужно немного помочь с преобразованием маршрутизации от 2 до Рельсы Рельсы 3.Рельсы 3 Маршрутизация: контроллер без CRUD

В app/views/layouts/application.html.erb, у меня есть:

<%= 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'? У вас есть что-то * перед * совпадением '/ clients/getAnimals', которое будет соответствовать URL-адресу? Как клиентский ресурс или аналогичный? –

ответ

2

Предполагая, что у вас также есть запись resources :clients, вы хотите убедиться, что над ней находится match '/clients/getAnimals', to: "clients#getAnimals" (Rails будет соответствовать тому, что попадает в нее первым).

Однако лучший способ может быть, чтобы положить его в ресурс:

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

@dave_newton и Dylan, большое спасибо. Вопрос Дэйва был совершенно прочным - были ресурсы: клиенты выше «/ clients/getAnimals», поэтому он соответствовал этому. Оба предложения Дилана работают, и я использую второй, чтобы поместить его в ресурс. Большое спасибо, за ответ так быстро. – sploiber

+0

У меня есть еще один вопрос, связанный с этим. В Rails 2 вы можете сделать это - map.connect '/ reports',: controller => "reports", и он отправит любое действие (например, getAnimals) в индекс отчетов. В Rails 3 есть способ сделать это в общем случае, или мне нужно перечислить каждое конкретное действие по ресурсам: клиенты? – sploiber

+0

Вы можете сделать что-то вроде отчетов 'match '(/: action (/: id)) (: format)' => 'reports'', что позволит использовать такие вещи, как'/reports/getAnimals' и '/ reports/forAnimal/40' и т. Д. –

Смежные вопросы