需要有关update_attributes的帮助

时间:2011-02-09 21:05:23

标签: ruby-on-rails ruby-on-rails-3 paperclip

我希望有人可以看看这个并就如何让这个行动变得更好提出建议。它的工作原理我喜欢它,但似乎没有必要创建两个模型实例。

我觉得我必须这样做,因为即使验证失败,update_attributes也不会更新数据库,我仍然希望@user实例可用于在视图中显示原始的@ user.photo。我正在使用回形针。

非常感谢。

def edit_avatar

    @user = User.find(@username_id)
    if params['post_data'].present?
        @user.update_attributes(params[:post_data])
        @errors = @user.errors
        if @user.errors.count == 0
            @start_jcrop = true
        else
            @user = User.find(@username_id)
        end
    end
end

1 个答案:

答案 0 :(得分:0)

您可以使用Dirty Changes功能,而不是重新加载模型。 或者你可以使用

@user.reload

而不是创建新实例。

@user = User.find(@username_id)
  ...
  else
      @user.reload
  end
end

您还可以按如下方式简化视图

@user = User.find(@username_id)
if params['post_data'].present?
  if @user.update_attributes(params[:post_data])
    @start_jcrop = true
  else
    @errors = @user.errors
    @user.reload
  end
end

如果你跳过重新加载

@user = User.find(@username_id)
if params['post_data'].present?
  if @user.update_attributes(params[:post_data])
    @start_jcrop = true
  else
    # render
    # the previous image is available at
    # @user.attribute_name_was
  end
end