Разработайте ссылки / маршруты, смешанные с не разработанной моделью - PullRequest
0 голосов
/ 03 декабря 2011

Я впервые использую Devise в приложении, и у меня возникла странная проблема, которую я не могу понять:

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

_header.html.erb

<div class='topbar'>
    <div class='container'>
        <%= link_to 'My app', root_path, :class => 'brand' %>
        <div class='nav'>
        </div>
        <%= render 'layouts/user_options' %>
    </div>
</div>

_user_options.html.erb

<ul class='user-options'>
    <% if user_signed_in? %>
      <li><%= link_to "Signed in as #{current_user.username}", '#' %></li>
      <li><%= link_to "Sign out", destroy_user_session_path, :method => :delete %></li>
    <% else %>
      <li><%= link_to "Sign up", new_user_registration_path %></li>
      <li><%= link_to "Sign in", new_user_session_path %></li>
    <% end %>
</ul>

Теперь я добавляю первую ссылку в навигационное меню, если я использую:

<%= link_to 'Tasks', '/tasks/index'  %>

Все хорошо. НО если я использую:

<%= link_to 'Tasks', :controller => 'tasks', :action => 'index'  %>

Когда я нажимаю на любую из ссылок Devise, например «Войти», я получаю 'No route matches {:controller=>"devise/tasks"}'

По запросу на комментарии, здесь вывод rake routes: Задачи: TOP => маршруты => среда (Смотрите полную трассировку, запустив задачу с --trace) MacBook-Pro-de-o: дорогой оскар $ bundle exec rake маршруты

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

а вот маршруты.rb:

  get "tasks/index"

  get "tasks/show"

  devise_for :users

  root :to => 'pages#home'

Почему это ?? Что я делаю не так?

Edit2 : Кстати, я забыл упомянуть, что Task belongs_to User, и модель User была сгенерирована devise. Что, вероятно, является причиной этого. Я не могу получить доступ к / tasks / index без / user / id / tasks /?

Редактировать : более странные вещи, я попытался использовать ресурсы: задачи в моем файле маршрутов вместо маршрутов 'get' для этого контроллера, и теперь, когда я нажимаю <%= link_to 'Tasks', :controller => 'tasks', :action => 'index' %>, он переводит меня в Действие шоу. Так что что-то действительно не так с моими маршрутами, по-видимому.

1 Ответ

6 голосов
/ 08 декабря 2011

Проблема с пространством имен devise.Когда вы используете создание ссылки следующим образом:

<%= link_to 'Tasks', :controller => 'tasks', :action => 'index' %>

, тогда маршрут генерируется из пространства имен current , которое «devise» при нажатии на любую ссылку devise.

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

<%= link_to 'Tasks', :controller => '/tasks', :action => 'index' %>

или использовать помощников, которые правильно работают в этой ситуации (tasks_index_path в случае 'get' tasks / index "'в маршрутах.rb или tasks_path в случае ресурсов: tasks)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...