Проблемы с "devise_for", "devise_scope"! - PullRequest
6 голосов
/ 31 марта 2011

Я пытаюсь настроить свои маршруты в разработке. Я пытался использовать devise_scope: user, но это не сработало. Поэтому я переключился на devise_for и пропустил пользовательские маршруты (регистрации, подтверждения, пароли, сеанс), и это сработало. Но затем в моих представлениях появляется ошибка, когда я вызываю "session_path", например. Он создавал форму, перенаправляющую на "session.user", что не имеет смысла.

Вот код:

  #routes.rb

  devise_for :users, :path => '', :skip => [ :passwords, :registrations, :confirmations] do
    post   "account/password",      :to => "devise/passwords#create"
    get    "account/password/new",  :to => "devise/passwords#new", :as => "new_password"
    get    "account/password/edit", :to => "devise/passwords#edit", :as => "edit_password"
    put    "account/password",      :to => "devise/passwords#update"
    post   "account",               :to => "users/registrations#create"
    get    "sign_up",               :to => "users/registrations#new"
    delete "account",               :to => "users/registrations#destroy"
    post   "confirmation",          :to => "devise/confirmations#create"
    get    "confirmation/new",      :to => "devise/confirmations#new", :as => "new_confirmation"
    get    "confirmation",          :to => "devise/confirmations#show"
  end

Новый вид сеанса:

  #users/sessions/new.html.erb
  = form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>

Ошибка:

No route matches {:action=>"new", :format=>:user, :controller=>"devise/passwords"}

Что мне делать? То, что случилось с «devise_scope», не работает правильно (ошибка, которую он отображал, была «Не удалось найти отображение устройства для ...»)?

Спасибо

Ответы [ 3 ]

6 голосов
/ 02 апреля 2011

Какие маршруты генерируются?Запустите рейковые маршруты, чтобы узнать.

Если вы не видите ожидаемые маршруты, попробуйте определить свои собственные маршруты в блоке as после оператора devise_for.Например,

devise_for :users, skip => [ :passwords, :registrations, :confirmations]

as :user do
    post   "account/password" => "devise/passwords#create"
    get    "account/password/new" => "devise/passwords#new" 
    get    "account/password/edit" => "devise/passwords#edit" 
    put    "account/password" => "devise/passwords#update"
...

end

Вам также может понадобиться настроить представления так, чтобы они указывали на новые пути, которые вы объявили.Посмотрите на вики Devise, чтобы узнать, как настроить представления.

1 голос
/ 16 ноября 2011

Я проверил ваши маршруты и получил это на rake routes:

account_password POST   /account/password(.:format)      {:controller=>"devise/passwords", :action=>"create"}
    new_password GET    /account/password/new(.:format)  {:controller=>"devise/passwords", :action=>"new"}
   edit_password GET    /account/password/edit(.:format) {:controller=>"devise/passwords", :action=>"edit"}
                 PUT    /account/password(.:format)      {:controller=>"devise/passwords", :action=>"update"}
         account POST   /account(.:format)               {:action=>"create", :controller=>"users/registrations"}
         sign_up GET    /sign_up(.:format)               {:action=>"new", :controller=>"users/registrations"}
                 DELETE /account(.:format)               {:action=>"destroy", :controller=>"users/registrations"}
    confirmation POST   /confirmation(.:format)          {:action=>"create", :controller=>"devise/confirmations"}
new_confirmation GET    /confirmation/new(.:format)      {:controller=>"devise/confirmations", :action=>"new"}
                 GET    /confirmation(.:format)          {:action=>"show", :controller=>"devise/confirmations"}
new_user_session GET    /sign_in(.:format)               {:action=>"new", :controller=>"devise/sessions"}
    user_session POST   /sign_in(.:format)               {:action=>"create", :controller=>"devise/sessions"}

destroy_user_session DELETE /sign_out(.:format) {: action => "destroy",: controller => "devise/ session "}

Итак, я думаю, вы должны использовать user_session_path (без каких-либо аргументов) на вашем form_for.Если вы введете пользователя в качестве аргумента, Rails будет думать, что это формат, и он не будет работать.

1 голос
/ 14 сентября 2011

попробуйте добавить :controllers => { :passwords => "devise/passwords"} параметр

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