2010-12-10 3 views
0

Релевентом кодыRails3: Простая задача маршрутизации между представлением и моделью

routes.rb

Waterloop3::Application.routes.draw do 
    resources :submissions 
    match ':controller(/:action(/:id(.:format)))' 
end 

submission_controller.rb - содержит действие под названием sort_by_category_academic - список всех материалов, представленных с категорией, академично.

class SubmissionsController < ApplicationController 
    def sort_by_category_academic 
    @submissions = Submission.find(:all, 
    :conditions=>["category = academic" ]) 
    end 
end 

index.html.erb - при нажатии на селекторном ссылку "Академический" приносит пользователю "/ sort_by_category_academic посылки"

<%= link_to 'Academic', :controller => "submission", :action => "sort_by_category_academic" %> 

Некоторые странное поведение стоит отметить.

В route.rb переместите «match»: controller (/: action (/: id (.: Format))) «выше» ресурсов: представления », как показано ниже.

Waterloop3::Application.routes.draw do 
    match ':controller(/:action(/:id(.:format)))' 
    resources :submissions 
end 

Когда я это сделал, по крайней мере, подчинение было направлено на академическое совершенство. Тем не менее, теперь страница представления все действовала. Я не могу добавлять новые записи с этим изменением. Проблема, похоже, связана с приоритетом маршрутизации, о котором я не совсем знаю. Если кто-то еще знает причину, по которой это устраняет проблему, я хотел бы услышать объяснение. RoR по-прежнему довольно странный для меня.

Мой вопрос

Я думал, что это будет делать эту работу.

match ':controller(/:action(/:id(.:format)))' 

Но я продолжаю получать эту ошибку, когда я нажимаю на ссылку Academic.

маршрутизации Ошибка

No route matches "/submission/sort_by_category_academic" 

Любая идея, как обойти эту проблему?


EDIT

Найти действия в submissions_controller.rb

def find 
    @submissions = Submission.find(:all, 
    :conditions=>["title = ? OR description = ?", params[:search_string], params[:search_string]]) 
    end 

Найти текстовое поле в index.html.erb

<%form_tag "/submissions/find" do%> 
<%=text_field_tag :search_string%> 
<%=submit_tag "Search"%> 
<%end%> 

Так FIND, предполагают, чтобы взять в SEARCH_STRING и просмотрите все материалы, соответствующие названию или описанию.

ответ

0

попробовать

resources :submissions do 
    collection do 
     get :sort_by_category_academic 
    end 
end 

И вы, вероятно, можно удалить маршрут по умолчанию в нижней

--edit ----

sort_by_category_academic_submissions GET /submissions/sort_by_category_academic(.:format) 

следует производить что

СЕБЯ следует просто позвонить

<%= link_to('Academic', sort_by_category_academic_submissions_path) %> 

У вас еще есть матч по умолчанию в верхней части ..

мины выглядит следующим образом: порядок важен ...

sort_by_category_academic_submissions GET /submissions/sort_by_category_academic(.:format) {:action=>"sort_by_category_academic", :controller=>"submissions"} 
          submissions GET /submissions(.:format)       {:action=>"index", :controller=>"submissions"} 
             POST /submissions(.:format)       {:action=>"create", :controller=>"submissions"} 
         new_submission GET /submissions/new(.:format)      {:action=>"new", :controller=>"submissions"} 
         edit_submission GET /submissions/:id/edit(.:format)     {:action=>"edit", :controller=>"submissions"} 
          submission GET /submissions/:id(.:format)      {:action=>"show", :controller=>"submissions"} 
             PUT /submissions/:id(.:format)      {:action=>"update", :controller=>"submissions"} 
             DELETE /submissions/:id(.:format)      {:action=>"destroy", :controller=>"submissions"} 

с этими маршрутами ..

WaterLoop::Application.routes.draw do 
    resources :submissions do 
    collection do 
     get :sort_by_category_academic 
    end 
    end 
end 
+0

Я использую, что один для другого действия называется, «найти», который используется для поиска. Его реализация почти такая же, как «sort_by_category_academic», и работает, пока «sort_by_category_academic» этого не делает. Но я попробую это. –

+0

хорошо, вы можете продолжать корректировать и просто запускать маршруты рейка, чтобы увидеть результирующие маршруты, которые сгенерированы. – Doon

+0

У меня есть это сейчас «ActiveRecord :: RecordNotFound в SubmissionsController # show Не удалось найти Подача с идентификатором = академический» –

0

ruby ​​1.9.2p0 (2010-08-18) [i386-mingw32]

C: \ Rails> cd waterloop3

C: \ Рельсы \ Waterloop3> рек маршруты (в C:/Рельсы/Waterloop3) представления GET /submissions(.:format) {: действие => "Индекс",: контроллер => "материалы"} POST /submissions(.:format) {: action => "create",: controller => "submissions"} new_submission GET /submissions/new(.:format) {: action => "new",: controller = > «подчинения»} edit_submission GET /submissions/:id/edit(.:format) {: action => "edit",: controller => "submissions"} submit GET /submissions/:id(.:format) {: action => "show",: controller => "submissions"} PUT /submissions/:id(.:format) {: action => "update",: controller => "submissions"} DELETE/submissions /:id(.:format) {: action = > "destroy",: controller => "submissions"} submissions_find GET /submissions/find(.format) {: controller => "submissions",: action => "find"}
GET/submissions/sort_by_category_academic (.: формат) {: контроллер => "Доводы",: действие => "академический"}

C: \ Рельсы \ Waterloop3>

0

routes.rb

Waterloop3 :: Application.routes. ничья do

Ресурсы: заявки получить "подчинения/найти" получить «Доводы/sort_by_category_academic (:. формат)»

конца

+0

Посмотрите на мой ответ выше Скопируйте мои маршруты точно. Используйте: sort_by_category_academic в отличие от метода цитирования/строки. – Doon

+0

Genius! Он работает сейчас. Большое спасибо. Что я должен написать для поиска на маршрутах? Я удалил старую линию маршрута. Мое действие поиска принимает строку. –

+0

что найти? Работает ли он на всех объектах или на одном объекте? добавление get: find в коллекцию вызовет метод find на контроллере. Вы ожидаете назвать это из формы, тогда вы можете использовать сообщение: find .. – Doon

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