2017-02-22 100 views
0

Использование Rails 3.2, Разрабатывают 3.5.1, SimpleFormDEViSE ошибки инлайн перестают появляться при переопределении метода обновления

Я использую метод пользовательские обновления в Devise:

def update 
    resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key) 
    resource_updated = update_resource(resource, account_update_params) 
    if resource_updated 
     sign_in resource_name, resource, :bypass => true 
     redirect_to edit_member_registration_path, notice: "Updated successfully" 
    else 
     clean_up_passwords(resource) 
     redirect_to edit_member_registration_path, alert: resource.errors.full_messages 
    end 
end 

Это мой код формы :

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= f.error_notification %> 
    <%= f.input :first_name %> 
    <%= f.input :last_name %> 
<% end %> 

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

enter image description here


Когда я удалил пользовательскую функцию обновления, я получаю такое поведение, что это именно то, что я хочу:


enter image description here

Есть ли что-то не так с моим функция обновления?

ответ

1

При перенаправлении, вероятно, resource в настоящее время перезагружается и получать очищенный errors Вместо редиректа, попробуйте

if resource_updated 
    sign_in resource_name, resource, :bypass => true 
    redirect_to edit_member_registration_path, notice: "Updated successfully" 
else 
    clean_up_passwords(resource) 
    respond_with resource 
end 

Ответчик должен вынести соответствующее моментальное сообщение, и пусть объект ресурса нетронутого с errors атрибут, необходимый для simple_form, должен знать, что имеет некоторую ошибку

+0

А как хорошо, любая идея, как я мог перенаправить его на собственный путь? –

+0

Вы попробовали 'reply_with'? Я думаю, что это сделает исходную страницу ресурсом с ошибками. Если нет, вы можете использовать 'render' вместо' redirect_to' – cefigueiredo