Я установил 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, чтобы новые маршруты сеансов не конфликтовали с существующими?