我希望有人可以看看这个并就如何让这个行动变得更好提出建议。它的工作原理我喜欢它,但似乎没有必要创建两个模型实例。
我觉得我必须这样做,因为即使验证失败,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
答案 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