2011-12-02 13 views
0

我使用的设计在应用中的第一次,我有一个奇怪的问题,我无法理解:设计链接/路由混错与非色器件模型

我已经建立了我的用户模型设计,并设置所有的注册,用户注册等,一切正常。在我的应用程序标题,我有我的导航菜单(目前为空),并在日志中的部分,注销等:

_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' %> 

当我点击任何一个设计环节,如“登录”,我得到'No route matches {:controller=>"devise/tasks"}'

通过对意见的要求,这里是rake routes: 任务的输出:TOP =>路线=>环境 (请参阅通过运行带有--trace任务全部跟踪) 的MacBook-PRO-DE-O:dearsherpa奥斯卡$束EXEC耙路线

   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' 

这是为什么?我做错了什么?

编辑2:顺便说一句,我忘了提及Task belongs_to User,并且用户模型已由设计生成。这可能是造成这种情况的原因。无法访问/任务/索引没有/ user/id/tasks /?

编辑:更怪异的东西,我尝试使用资源:在我的路线文件的任务,而不是该控制器的“得到”的路线,而现在当我点击<%= link_to 'Tasks', :controller => 'tasks', :action => 'index' %>需要我的演出动作。所以显然,我的路线出现了一些问题。

+0

运行:rake路由并将结果复制粘贴到此处。 – daniel

+0

你可以发布routes.rb的代码并运行'rake routes'吗? – stephenmurdoch

+0

完成后,我编辑了我的问题 –

回答

6

问题出在'devise'命名空间。当您使用链接创建这样:

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

然后从当前命名空间,当你点击任何链接色器件是“色器件”产生的途径。

为了避免这种情况,您可以使用路由这样:

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

或路由使用的帮手,而在这种情况下正常工作(tasks_index_path在“得到‘任务/索引’”案.rb或tasks_path,如果是资源:任务)

+0

生成的html听起来像一个很好的解决方案,但是你能否澄清这是一个Devise特定问题还是Rails标准行为?我一直在使用Rails一段时间,之前从未遇到过这个问题 –

+0

这是常见的导轨行为。实际上无法快速找到与此功能相对应的文档,但使用通用用户定义的命名空间尝试了它 - 路由的工作方式与您的示例中的方式相同 – alony