Конфликт с наименованием маршрута сессий в Devise - PullRequest
0 голосов
/ 07 мая 2018

Я установил Devise на существующее приложение rails 4.2.

Я хочу постепенно развернуть новую систему входа в систему (используя devise), где текущая система входа в систему (выполненная на заказ) все еще работает параллельно. В некоторых частях приложения я хочу использовать новую систему.

В предыдущей настройке определены следующие маршруты:

resources :sessions, :only => [:new, :create, :destroy]
resources :password_resets
resources :users do
  member do
    get 'verify_email/:token', :action => 'verify_email', :as => :verify_email
  end
end

Итак, я создал новую модель пользователя под названием CustomerUser.

Затем я добавил разработанные маршруты:

devise_for :customer_users
resource :customer_users

Представления регистрации работают правильно, однако логин (сеансы) конфликтует с существующими маршрутами.

Ссылка, генерируемая из экрана регистрации на экран входа в систему, не работает (указывает на /da/sessions/new.customer_user и, щелкая по ней, я получаю ошибку ActionController::UnknownFormat in SessionsController#new)

Также, когда я захожу на страницу входа напрямую /da/customer_users/sign_in и отправляю форму, она отправляет сообщение POST по пути /da/sessions/customer_user, заканчивающееся ошибкой No route matches.

Я пытался добавить эти переопределения в маршруты разработки, однако они все еще не работают.

devise_for :customer_users do
  match 'sessions/customer_user', to: 'devise/sessions#create', via: :post
  match 'sessions/customer_user', to: 'devise/sessions#new', via: :get
end

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

# resources :sessions, :only => [:new, :create, :destroy]

Маршруты, создаваемые devise, следующие:

new_customer_user_session_da_path   GET /da/customer_users/sign_in(.:format)    devise/sessions#new {:locale=>"da"}
customer_user_session_da_path   POST    /da/customer_users/sign_in(.:format)    devise/sessions#create {:locale=>"da"}
destroy_customer_user_session_da_path   DELETE  /da/customer_users/sign_out(.:format)   devise/sessions#destroy {:locale=>"da"}

Предыдущая настройка (не разработка) создает следующие маршруты:

sessions_da_path    POST    /da/sessions(.:format)  sessions#create {:locale=>"da"}
new_session_da_path GET /da/sessions/new(.:format)  sessions#new {:locale=>"da"}
session_da_path DELETE  /da/sessions/:id(.:format)  sessions#destroy {:locale=>"da"}

Я также заметил, что представления, созданные devise, используют этот помощник:

session_path(resource_name)

который мне трудно понять, как он работает с точки зрения обычных маршрутов Rails и сгенерированных маршрутов (см. Выше).

Как мне изменить настройки Devise, чтобы новые маршруты сеансов не конфликтовали с существующими?

...