Почему devise ставит / devise / перед каждым якорем link_to? - PullRequest
1 голос
/ 02 мая 2011

Я только что сгенерировал все представления для устройства, и я начинаю настраивать экран входа в систему. Он отлично работает, за исключением того, что все ссылки, которые генерируются на странице входа, начинаются с "/ devise".

  1. Почему он это делает? Похоже, странное поведение по умолчанию
  2. Как мне остановить добавление / разработку к каждому link_to ()?

Файл моих маршрутов:

devise_for :users

get "/webpages/:page" => "webpages#show", :as => :show_webpage

root :to => "webpages#index"

Мои 'маршруты рейка'

        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"}
           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"}
            show_webpage GET    /webpages/:page(.:format)      {:controller=>"webpages", :action=>"show"}
                    root        /(.:format)                    {:controller=>"webpages", :action=>"index"}

Сообщение об ошибке, которое я получаю, когда пытаюсь отобразить страницу, полученную с контроллера devise:

ActionController::RoutingError in Devise/sessions#new

Showing /home/egervari/Projects/training/app/views/layouts/application.html.erb where line #21 raised:

No route matches {:controller=>"devise/webpages", :action=>"show", :page=>"tour"}

Extracted source (around line #21):

18:           </a>
19:         </li>
20:         <li>
21:           <%= link_to("Tour", :controller => "webpages", :action => "show", :page => "tour") %>
22:         </li>
23:         <li>
24:           <%= link_to("Why Use Us?", :controller => "webpages", :action => "show", :page => "why") %>

Как вы можете видеть выше, он пытается добавить "devise /" к моей ссылке. Это совсем не то, что я хочу.

Ответы [ 3 ]

2 голосов
/ 02 мая 2011

Наконец-то я понял.

      <li><%= link_to("Terms and Use", :controller => "/webpages", :action => "show", :page => "terms") %> |</li>
      <li><%= link_to("Privacy Policy", :controller => "/webpages", :action => "show", :page => "privacy") %> |</li>

По сути, вместо слова webpages я поставил «/ webpages», чтобы сообщить рельсам, что эти контроллеры не находятся в пространстве имен «devise» или родительском каталоге..

Это соответствующее исправление?Есть ли более простое решение?

1 голос
/ 02 мая 2011

В более новых версиях Rails вы можете сделать:

<%= link_to "Privacy Policy", show_webpage_path(:page => 'privacy') %>

Вы просто добавляете _path к именованному маршруту, который вы видите, когда делаете 'рейк-маршруты'.Добавление _url к указанному маршруту даст вам строку URL, кстати.Что может быть полезно.

Ян.

0 голосов
/ 02 мая 2011

Все ссылки / формы, предназначенные для разработки, должны начинаться с "/ devise". Смотрите маршруты, созданные devise ниже. Почему вы хотите изменить это поведение? Это не работает? Или вам нужно / хотите настроить контроллеры устройства?

          new_user_session GET    /users/login(.:format)                                           {:action=>"new", :controller=>"devise/sessions"}
              user_session POST   /users/login(.:format)                                           {:action=>"create", :controller=>"devise/sessions"}
      destroy_user_session GET    /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/register(.: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"}
         user_confirmation POST   /users/confirmation(.:format)                                    {:action=>"create", :controller=>"devise/confirmations"}
     new_user_confirmation GET    /users/confirmation/new(.:format)                                {:action=>"new", :controller=>"devise/confirmations"}
                           GET    /users/confirmation(.:format)                                    {:action=>"show", :controller=>"devise/confirmations"}
...