Я пытаюсь настроить форму на моей домашней странице. Мне удалось это сделать, следуя Wiki
Кроме того, если неверные данные входа в систему, отображается /devise/session/new.html.erb
.
Я не хочу этого. Я хочу, чтобы мой пользователь был перенаправлен на root_url
WITH ошибки во флэш-сообщении.
Я смог переопределить registrations_controller.rb
для другой функции, но переопределить sessions_controller.rb
вызывает много проблем.
Что я могу изменить, чтобы делать то, что хочу? Я по-прежнему хочу, чтобы пользователь был перенаправлен на after_sign_in_path
, если знак прошел правильно.
Исходный контроллер здесь
До сих пор я знаю, что должен сделать это в своем routes.rb
devise_for :users, :controllers => { :registrations => "registrations", :sessions => "sessions" }
И я также установил controller/sessions_controller.rb
class SessionsController < Devise::SessionsController
# GET /resource/sign_in
def new
resource = build_resource
clean_up_passwords(resource)
respond_with_navigational(resource, stub_options(resource)){ render_with_scope :new }
end
end
У меня такое ощущение, что мне нужно изменить render_with_scope :new
, но... как?
С этой версией я получаю сообщение об ошибке undefined method 'users_url' for #<SessionsController:0x5072c88>
Хорошо, я буду ждать вашей драгоценной помощи
PS: Это сообщение помогло мне многое для обработки ошибок при подписке. Может быть, это поможет вам в регистрации ошибок?
==== EDIT ====
Следуя совету 1-го ответа, я также добавил к initializers/devise.rb
:
config.warden do |manager|
manager.failure_app = CustomFailure
end
Когда пользователь не регистрируется и пытается получить доступ к "ограниченной" области, он перенаправляется на root_url
, но когда ошибка входа идет не так, у меня теперь есть следующая ошибка:
The action 'devise/sessions#new' could not be found for Devise::SessionsController
(PS: я удалил все, что я сделал с Session Controller, и журнал работает в случае успеха)
=== РЕДАКТИРОВАТЬ 2 ===
После этого Wiki перенаправление работает отлично НО У меня нет уведомления об ошибке.
И я показываю сообщение с предупреждением/уведомлением с этим, если это что-то меняет
<% flash.each do |name, msg| %>
<% if msg.class == Array %>
<% msg.each do |message| %>
<%= content_tag :p, message, :id => "flash_#{name}" %>
<% end %>
<% else %>
<%= content_tag :p, msg, :id => "flash_#{name}" %>
<% end %>
<% end %>
=== ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ ===
Принятый ответ работает. Просто не забудьте отобразить flash alerts