从其他控制器更新对象时显示表单错误

时间:2012-05-04 18:10:15

标签: ruby-on-rails-3 forms

我在account_settings控制器中有一个表单,通过user更新users_controller对象。错误消息未通过。这是一个代码。

ACCOUNT_SETTINGS / account.html.haml

= form_for @user, :url => { :controller => "users", :action => "update", :id => @user.id } do |f|
  - if @user.errors.any?
    .alert.alert-error
      %h4
        Please address the following errors:
      %ul
        - @user.errors.full_messages.each do |msg|
          %li= msg
  form stuff...

account_settings_controller

def account
  @user = current_user
end

users_controller

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:notice] = "User was successfully updated."
  end
  redirect_to :back
end

表单不会更新,但没有错误消息被传回。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是因为您正在返回重定向。 @user对象不会在重定向中保留。你应该做的事情如下:

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:notice] = "User was successfully updated."
    redirect_to :back
  else
    render :edit
  end
end

在此,我们在更新成功时重定向,但如果没有,我们会呈现edit操作。因此,我们可以访问@user,您的错误将出现在@user.errors