2011-03-13 140 views
5

編輯2:對我來說看起來像一個快速臨時修復是在控制器名稱前添加一個正斜槓「/」在我的視圖的link_to_unless_current和current_page方法中。 例如Rails設計路由錯誤 - 「無路由匹配」(controller =>「devise/sessions」)

<% active = current_page?(:controller => '/sites', :action => action) ? 'active' : '' %> 
     <li class="<%= active %>"><%= link_to_unless_current(anchor, { :controller => '/sites', :action => action }) %></li> 

這裏是我的情況下,任何人都遇到的問題更多信息其他運行到同樣的事情。 https://github.com/plataformatec/devise/issues/471

============================================ ================

我的設計路徑在我的導航(_header.html.erb)動態時破壞了。我希望這是一個簡單的修復,但真的失去了atm。在我的網站的每個頁面的作品,除非我去/管理員,然後我得到下面的路由錯誤:

這是我收到確切的錯誤:

Started GET "/admin" for 75.13.95.55 at 2011-03-13 15:40:49 -0500 
    Processing by AdminController#index as HTML 
Completed in 2ms 


Started GET "https://stackoverflow.com/users/sign_in" for 75.13.95.55 at 2011-03-13 15:40:51 -0500 
    Processing by Devise::SessionsController#new as HTML 
Rendered /usr/local/rvm/gems/ruby-1.9.2-p0/gems/devise-1.1.5/app/views/devise/shared/_links.erb (1.9ms) 
Rendered layouts/_header.html.erb (37.0ms) 
Rendered /usr/local/rvm/gems/ruby-1.9.2-p0/gems/devise-1.1.5/app/views/devise/sessions/new.html.erb within layouts/application (57.5ms) 
Completed in 91ms 

ActionView::Template::Error (No route matches {:action=>"coupons", :controller=>"devise/sessions"}): 
    7: <div id="navcontainer"> 
    8: <ul id="navlist"> 
    9:  <% nav.each do |anchor, action| %> 
    10:  <% active = current_page?(:action => action) ? 'active' : '' %> 
    11:  <li class="<%= active %>"><%= link_to_unless_current(anchor, { :action => action }) %></li> 
    12:  <% end -%> 
    13: </ul> 
    app/views/layouts/_header.html.erb:10:in `block in _app_views_layouts__header_html_erb__482084855_91994390_872614734' 
    app/views/layouts/_header.html.erb:9:in `each' 
    app/views/layouts/_header.html.erb:9:in `_app_views_layouts__header_html_erb__482084855_91994390_872614734' 
    app/views/layouts/application.html.erb:17:in `_app_views_layouts_application_html_erb___293959382_92160660__194406143' 

這裏是config/routes.rb文件:

devise_for :users 

    match '/info' => 'sites#info', :as => :info 
    match "/reviews" => 'sites#reviews', :as => :reviews 

    resources :admin do 
    collection do 
     put 'moderate' 
     get 'approved' 
    end 
    end 

    root :to => 'sites#coupons' 

這裏的app/views/layouts/_header.html.erb文件:

<% nav = { 'Coupons' => 'coupons', 'Reviews' => 'reviews', 'Info' => 'info' } %> 

<div id="navcontainer"> 
    <ul id="navlist"> 
    <% nav.each do |anchor, action| %> 
     <% active = current_page?(:action => action) ? 'active' : '' %> 
     <li class="<%= active %>"><%= link_to_unless_current(anchor, { :action => action }) %></li> 
    <% end -%> 

而這裏的輸出rake routes

 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 GET /users/sign_out(.:format)   {:action=>"destroy", :controller=>"devise/sessions"} 
        info  /info(.:format)     {:controller=>"sites", :action=>"info"} 
       reviews  /reviews(.:format)     {:controller=>"sites", :action=>"reviews"} 
moderate_admin_index PUT /admin/moderate(.:format)  {:action=>"moderate", :controller=>"admin"} 
approved_admin_index GET /admin/approved(.:format)  {:action=>"approved", :controller=>"admin"} 
     admin_index GET /admin(.:format)     {:action=>"index", :controller=>"admin"} 
         POST /admin(.:format)     {:action=>"create", :controller=>"admin"} 
      new_admin GET /admin/new(.:format)    {:action=>"new", :controller=>"admin"} 
      edit_admin GET /admin/:id/edit(.:format)  {:action=>"edit", :controller=>"admin"} 
       admin GET /admin/:id(.:format)    {:action=>"show", :controller=>"admin"} 
         PUT /admin/:id(.:format)    {:action=>"update", :controller=>"admin"} 
         DELETE /admin/:id(.:format)    {:action=>"destroy", :controller=>"admin"} 
        root  /(.:format)      {:controller=>"sites", :action=>"coupons"} 

感謝您的期待!

編輯1:當我試圖從@Dogbert的建議,它似乎 並沒有把不幸的差別:

No route matches {:controller=>"devise/sites", :action=>"coupons"} 
Extracted source (around line #9): 

6: <div id="navcontainer"> 
7: <ul id="navlist"> 
8:  <% nav.each do |anchor, action| %> 
9:  <% active = current_page?(:controller => 'sites', :action => action) ? 'active' : '' %> 
10:  <li class="<%= active %>"><%= link_to_unless_current(anchor, { :controller => 'sites', :action => action }) %></li> 
11:  <% end -%> 
12: </ul> 
+0

+1粘貼在所有相關的代碼:) – Dogbert 2011-03-13 22:30:17

回答

2

嘗試做

<li class="<%= active %>"><%= link_to_unless_current(anchor, { :controller => 'sites', :action => action }) %></li> 

的問題似乎是, ,當你沒有在link_to中指定controller時,它會自動使用當前頁面的控制器。在這種情況下,它試圖用devise/sessions控制器,用coupons的動作。

+0

好主意,這是我第一次嘗試過,但它似乎並沒有區別,我在OP中添加了錯誤。 – coasthird 2011-03-13 23:09:06

+2

你可以試試':controller =>':: sites''和':controller =>'/ sites''。 – Dogbert 2011-03-14 09:14:00

+0

Dogbert,我昨晚編輯了我的主帖,'/網站'似乎做了竅門,謝謝你的跟進!以下是Devise的github的詳細資料:[https://github.com/plataformatec/devise/issues/471](https://github.com/plataformatec/devise/issues/471) – coasthird 2011-03-14 14:39:18

0

我會考慮命名空間是這樣的:

命名空間:管理員做 根:到=> 「基地#指數」 資源:用戶做 資源:權限 結束 結束

+0

正如IRC所討論的那樣,看起來這樣會適用於我的情況。儘管謝謝你的回答! – coasthird 2011-03-14 00:23:01

0

我會建議使用路由幫助器來代替散列。該網站的部分像這樣創建路線:

scope :controller => "sites" do 
    get 'somewhere', :as => "somewhere" 
    # etc... 
end 

然後參考他們在您的視圖somewhere_urlsomewhere_path

0

檢查你的控制器和視圖擊潰

每個人都要來user_sessionsuser_session

看到這個:

形式:

<%= form_for @user_sessions, :url => {:action => "create"} do |f| %> 

路線:

get "user_session/new" 
    match 'login' => "user_sessions#new",  :as => :login 
    match 'logout' => "user_sessions#destroy", :as => :logout 
resources :user_sessions 

控制器也提至user_sessions

Rails的設計路由錯誤 - 「沒有路由匹配」(控制器=>「設計/會話」)

這種類型的錯誤會

0

我得到了相同的從應用程序控制器內的rescue_from塊調用幫助程序時出錯。我所做的是在前面加上助手與完全合格的路徑是這樣

Rails.application.routes.url_helpers.new_user_session_path 

希望它可以幫助未來的Google。

相關問題