Как подключиться к другому контроллеру в рельсах?

Я изучаю Ruby on Rails, и у меня есть немой вопрос о функции link_to.

Я создал контроллер под названием "home", и я создал "index" в качестве действия.

Я настроил устройство. Однако, когда я просматриваю некоторые ссылки, такие как sign_in, sign_up и т.д., Я получаю эту ошибку:

Routing Error
No route matches {:controller=>"devise/home"}

Я сузил его до:

<%= link_to "Home", { :controller => "home", :action => "index" }, :class => "navlink" %>

Это работает для моих действий для дома, но не для моих действий.

Что мне здесь не хватает?

1 ответ

Devise создает набор вспомогательных функций для вас, которые генерируют правильные пути. Выполните rake routes из командной строки, чтобы увидеть их. Вы получите результат, похожий на следующий (если ваша модель Devise называется User).

new_user_session GET /users/sign_in(.:format) {:controller=>"devise/sessions", :action=>"new"}
 user_session POST /users/sign_in(.:format) {:controller=>"devise/sessions", :action=>"create"}
 destroy_user_session GET /users/sign_out(.:format) {:controller=>"devise/sessions", :action=>"destroy"}
 user_password POST /users/password(.:format) {:controller=>"devise/passwords", :action=>"create"}
 new_user_password GET /users/password/new(.:format) {:controller=>"devise/passwords", :action=>"new"}
 edit_user_password GET /users/password/edit(.:format) {:controller=>"devise/passwords", :action=>"edit"}
 user_password PUT /users/password(.:format) {:controller=>"devise/passwords", :action=>"update"}
 user_registration POST /users(.:format) {:controller=>"devise/registrations", :action=>"create"}
 new_user_registration GET /users/sign_up(.:format) {:controller=>"devise/registrations", :action=>"new"}
 edit_user_registration GET /users/edit(.:format) {:controller=>"devise/registrations", :action=>"edit"}
 user_registration PUT /users(.:format) {:controller=>"devise/registrations", :action=>"update"}
 user_registration DELETE /users(.:format) {:controller=>"devise/registrations", :action=>"destroy"}

_path к первой части каждой строки дает вам имя вспомогательной функции, которую вы должны вызвать.

Например, следующее даст вам ссылку на страницу входа:

<%= link_to "Login", new_user_session_path %>

Помните, если запрос DELETE а не GET (например, ссылка на выход), вам нужно указать это как часть вызова link_to.

<%= link_to "Logout", destroy_user_session_path, :method => :delete %>

licensed under cc by-sa 3.0 with attribution.