覆盖更新方法时,设计内联错误会停止显示

时间:2017-02-22 16:09:26

标签: ruby-on-rails ruby-on-rails-3 validation devise simple-form

使用Rails 3.2,Devise 3.5.1,SimpleForm

我在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 %>

一切正常,但是当出现验证错误时,我无法弄清楚为什么它们只出现在Flash消息中而不是内联。

enter image description here

当我删除自定义更新功能时,我得到了这种行为,这正是我想要的:

enter image description here

我的更新功能有问题吗?

1 个答案:

答案 0 :(得分: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

响应者应该呈现相应的flash消息,并且让资源对象不受errors属性的影响,而simple_form必须知道它有一些错误