Как связать с другим контроллером в рельсах? - PullRequest
0 голосов
/ 22 ноября 2011

Я изучаю 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 Ответ

3 голосов
/ 22 ноября 2011

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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...