Rails 3 проблема спокойного маршрута - PullRequest
2 голосов
/ 28 апреля 2011

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

<%= link_to "invitation", :controller => :invitations, :action => :index %>

Для соблюдения остальных правил я изменил ссылку на:

<%= link_to "invitation", index_invitation_path %>

Ошибка, которую я получаю:

undefined local variable or method `index_invitation_path'

Маршруты рейка дают:

invitations GET    /invitations(.:format)          {:controller=>"invitations", :action=>"index"}

Имя страницы - index.html.erb. Модель по приглашению. Контроллер - это константа приглашения_контроллер.rb. У маршрутов есть ресурсы: приглашения. Чего мне не хватает?

Спасибо!

Ответы [ 4 ]

1 голос
/ 28 апреля 2011

Вам понадобится маршрут в вашем файле rout.rb, который определяет отображение на контроллер приглашений и действие index.

Обычно это создается с помощью вызова ресурсов

resources :invitations

Создает несколько маршрутов по умолчанию, которые вы можете увидеть, запустив rake route.

Для отдельных ресурсов вы также можете определить его с помощью вызова на совпадение

match "invitations/:id" => "invitations#index", :as => index_invitation

На сайте rails есть отличный ресурс по маршрутизации, который предоставляет все детали: Маршрутизация извне

Обновление: Исходя из вашего обновленного вопроса, ваш маршрут включает в себя маршрут invitaions (обратите внимание на конечные ') - ничего с указателем или приглашением. Префикс index_ генерируется вызовом resources, когда он создает маршруты по умолчанию для: приглашений.

Похоже, вы определили пользовательское сопоставление get для приглашения. Хотя технически это может сработать, если вы хотите поддерживать спокойные маршруты, используйте метод resources. И прочитайте руководство по маршрутизации с рельсов, за которым очень легко следить и довольно подробно.

1 голос
/ 28 апреля 2011

Предполагая, что у вас правильная маршрутизация:

resources :invitations

Тогда правильный помощник для действия индекса (с URL /invitations.html) будет

invitations_path

Вы можете увидеть большеинформация по трассе рейка.Он будет отображать текст, подобный следующему:

             lists GET    /lists(.:format)
           {:action=>"index", :controller=>"lists"}
                   POST   /lists(.:format)
           {:action=>"create", :controller=>"lists"}
          new_list GET    /lists/new(.:format)
           {:action=>"new", :controller=>"lists"}
         edit_list GET    /lists/:id/edit(.:format)
           {:action=>"edit", :controller=>"lists"}
              list GET    /lists/:id(.:format)
           {:action=>"show", :controller=>"lists"}
                   PUT    /lists/:id(.:format)
           {:action=>"update", :controller=>"lists"}
                   DELETE /lists/:id(.:format)
           {:action=>"destroy", :controller=>"lists"}
              root        /(.:format)
           {:controller=>"lists", :action=>"index"}

Выше был взят из моего собственного маршрута (для модели под названием List).Метод вспомогательного маршрута отображается непосредственно перед методом HTTP.Вы должны помнить, чтобы добавлять _path к каждому вспомогательному методу.Например, вспомогательные методы, которые я мог бы использовать:

list_path(list)
edit_list_path(list)
new_list_path
lists_path
0 голосов
/ 28 апреля 2011

Я думаю, вам нужно, чтобы invitations_controller.rb содержал InvitationsController. Множественное число.

0 голосов
/ 28 апреля 2011

введите rake route в вашей консоли и посмотрите список доступных маршрутов. Кажется, такого маршрута нет index_invitation_path ? может быть, он назван по-другому

...