как мне сделать ссылку на страницу в другом месте приложения со страницы Devise? - PullRequest
1 голос
/ 29 ноября 2011

Мое приложение использует Devise для входа. Я установил его в соответствии с вики и все заработало нормально.Недавно я добавил страницу «Условия предоставления услуг» в свое приложение по адресу «http://127.0.0.1:3000/tos",», оно маршрутизируется через статический контроллер:

match ':action' => 'static#:action'

Я поместил ссылку на него ввнизу моего файла application.html.erb. Я хочу, чтобы ссылка на Условия предоставления услуг и Политику конфиденциальности была внизу каждой страницы. Но когда я перехожу на страницу users/sign_in, она не отображает ссылку на TOS.страница - вместо этого есть ошибка (ниже).

Я удалил все маршруты в своем приложении, кроме этих (с целью отслеживания этой проблемы):

   root :to => 'home#index'
   #devise routes
   devise_for :users, :admins
   #static
   match ':action' => 'static#:action'

Ссылка указана примерно так: <%= link_to "Terms of Service", :controller => "static", :action => "tos" %>

Ошибка:

No route matches {:controller=>"devise/static", :action=>"tos"}

Так что Devise как бы мешает моей маршрутизации на эту статическую страницуКак мне указать маршрут для перехода к корню приложения, а не начинать с Devise?

Обновление: в краткосрочной перспективе, ответ заключался в том, чтобы жестко закодировать его: <%= link_to "Terms of Service", "/tos" %>- не идеальный ответ.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2011

Это должно сработать тогда:

match ':action' => 'static#:action', :as => :static

и ваша ссылка должна быть сгенерирована что-то вроде:

<%= link_to "Terms of Service", static_path(:action => 'tos') %>

0 голосов
/ 30 ноября 2011

Я получал эту ошибку много раз. Я исправляю это, добавляя маршрут в блок маршрутизации устройства

вот так (в вашем случае) Обновление добавлены различные маршруты, чтобы попробовать

devise_for :users, admins do
  match '/:action' => 'static#:action'     
end

match '/:action' => 'static#:action'

devise_for :users, admins do
      match '/tos' => 'static#tos'     
    end

    match ':action' => 'static#:action'

Я также покидаю маршрут за пределами блока. Не очень СУХОЙ, но это работает.

0 голосов
/ 29 ноября 2011

В дополнение к генерации представлений

rails generate devise:views

вам необходимо настроить devise для использования представлений с областью вместо представлений из гема

config.scoped_views = "true” 

в config / initializer /файл devise.rb

...