2011-03-13 20 views
5

Editar 2: parece que una solución temporal para mí fue agregar una barra inclinada "/" delante del nombre del controlador en mis métodos link_to_unless_current y current_page de mi vista. p.Rails Error de enrutamiento del programa - "No coincide la ruta" (controlador => "idear/sesiones")

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

Aquí hay más información sobre el problema que encontramos en el caso de cualquier otra persona se encuentra con la misma cosa. https://github.com/plataformatec/devise/issues/471

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

Mi camino de diseño se rompió cuando hice mi navegación (_header.html.erb) dinámica. Espero que esto sea una solución simple, pero que realmente haya perdido el cajero automático. Cada página en mi sitio funciona, excepto cuando voy a/admin y luego me sale el error de enrutamiento a continuación:

Aquí está el error exacto que recibo:

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' 

Aquí está el archivo 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' 

aquí está el archivo 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 -%> 

Y es aquí la salida de 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"} 

Gracias por mirar!

Edición 1: Cuando probé la sugerencia de @Dogbert, no parece hacer una diferencia por desgracia:

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 para pegar en todo el código relevante :) – Dogbert

Respuesta

2

trate de hacer

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

El problema parece ser que , cuando no especifica el controller en un link_to, automáticamente usa el controlador de la página actual. En este caso, intentó usar el controlador devise/sessions, con acción coupons.

+0

Buena idea, esto es lo primero que intenté también, pero no parece marcar la diferencia, agregué ese error en mi OP. – coasthird

+2

Podría intentar ': controller => ':: sites'' y': controller =>'/sites''. – Dogbert

+0

Dogbert, edité mi publicación principal anoche, los '/ sitios' parecían hacer el truco, ¡gracias por seguirme! Aquí están los detalles del github de Devise: [https://github.com/plataformatec/devise/issues/471](https://github.com/plataformatec/devise/issues/471) – coasthird

0

Me miro en namespacing así:

espacio de nombres: admin hacer raíz: a => "índice de base" # recursos: los usuarios recursos: Permisos finales final

+0

Como se discutió en el IRC, no es así. Parece que esto funcionará en mi caso. ¡Gracias por la respuesta! – coasthird

0

I recomendaría usar un ayudante de enrutamiento para esto en lugar de un hash. Crear rutas para las piezas de sitio como este:

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

continuación hacen referencia a ellos en su opinión como somewhere_url o somewhere_path.

0

compruebe el controlador y ver rutas de

Cada uno debe llegar a user_sessions o user_session

ver esto:

Forma:

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

Rutas:

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

controlador también mencionan a user_sessions

de error de enrutamiento rieles Diseñar - “No hay ninguna ruta” (controlador => “diseñar/sesiones”)

este tipo de error vendrán

0

Tengo la misma error al llamar al ayudante desde un bloque rescue_from dentro del controlador de la aplicación. Lo que hice fue anteponer al ayudante con la ruta totalmente calificada como esta

Rails.application.routes.url_helpers.new_user_session_path 

Espero que ayude a los futuros googlers.

Cuestiones relacionadas