Rails 3 и Devise — выход не работает после преобразования приложения в Rails 3

#ruby-on-rails-3 #devise

#ruby-on-rails-3 #разработка

Вопрос:

Мои маршруты

 devise_for :users
devise_for :admin_users, ActiveAdmin::Devise.config #I have also tried removing this for any conflicts
resources :users
 

Ссылка для выхода. Маршруты в /users/sign_out порядке

 <%= link_to "Logout", destroy_user_session_path, :method => :delete %>
 

Попытка выхода выдает ошибку:

 Couldn't find User with id=sign_out
 

Если я затем удалю ресурс: users, я получу:

 The action 'sign_out' could not be found for UsersController
 

Что не так? Точно такой же код работал с Rails 2.3.8 and соответствующей Devise версией

Вход в систему и т. Д. работает нормально.

Моя настройка:

  • Ruby 1.9.2
  • Rails 3.1.1.rc3
  • Разработка 1.4.8

Ответ №1:

Прежде всего, использовать один и тот же путь для UsersController и Devise — не лучшая идея. Я бы предложил использовать путь типа ‘/ accounts’ для Devise.

Но это, вероятно, не является причиной вашей проблемы с выходом, как devise_for :users это было раньше resources :users в routes.rb. Похоже, причина в том, что, если в вопросе нет опечатки, после запятой нет destroy_user_session_path . :method => :delete будет интерпретироваться как параметр destroy_user_session_path , если нет запятой.

Кроме того, убедитесь, что вы включили jquery и jquery_ujs в application.js , так как они необходимы для :method => :delete работы.

Комментарии:

1. Да, это была опечатка. Вы имеете в виду так: devise_for:users,:path => «учетная запись» ? Затем я получаю сообщение об ошибке: маршрут не соответствует [GET] «/ account / sign_out». Rake routes говорит: destroy_user_session УДАЛИТЬ / аккаунт / выход (.:format) {:действие => «уничтожить», : контроллер =>»разработка / сеансы»}

2. @Frexuz если это была опечатка, и вы изменили путь, то вы либо не включаете jquery, либо jquery по какой-то причине не работает.

3. Вы правы. Я неправильно загрузил жемчужину rails jquery. Спасибо!