Ошибка маршрутизации Rails Devise - «Не найдено ни одного маршрута» (controller => «devise / session») - PullRequest
5 голосов
/ 14 марта 2011

Редактировать 2: Похоже, что быстрое временное исправление для меня заключалось в добавлении косой черты "/" перед именем контроллера в моих методах link_to_unless_current и current_page с моей точки зрения. например,

<% 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) динамической. Я надеюсь, что это простое исправление, но действительно потерянное. Все страницы на моем сайте работают, за исключением случаев, когда я захожу в / admin и затем получаю ошибку маршрутизации ниже:

Вот точная ошибка, которую я получаю:

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 "/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>

Ответы [ 5 ]

2 голосов
/ 14 марта 2011

Попробуйте сделать

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

Кажется, проблема в том, что, когда вы не указываете controller в link_to, он автоматически использует контроллер текущей страницы.В этом случае он попытался использовать контроллер devise/sessions с действием coupons.

0 голосов
/ 14 февраля 2015

Я получил ту же ошибку при вызове помощника из блока rescue_from в контроллере приложения. То, что я сделал, это предвосхитил помощнику полный путь, подобный этому

Rails.application.routes.url_helpers.new_user_session_path

Надеюсь, это поможет будущим гуглерам.

0 голосов
/ 13 января 2012

Проверьте свой контроллер и просмотрите маршруты

Каждый должен прийти к user_sessions или user_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 Devise - «Нет совпадений маршрутов» (контроллер => «devise / session»)

этот тип ошибки придет

0 голосов
/ 28 сентября 2011

Я бы порекомендовал использовать для этого хэш-помощник по маршрутизации. Создайте маршруты для частей сайта, например:

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

Затем назовите их, по вашему мнению, somewhere_url или somewhere_path.

0 голосов
/ 14 марта 2011

Я бы посмотрел на пространство имен следующим образом:

пространство имен: admin do root: to => "base # index" ресурсы: пользователи делают ресурсы: права доступа заканчиваются

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