2011-12-02 34 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