gpt4 book ai didi

ruby-on-rails - 仅当属性已更改时才更新用户的属性

转载 作者:行者123 更新时间:2023-12-03 20:09:14 26 4
gpt4 key购买 nike

我的项目的原始的,愉快的工作版本如下所示:

1)用户填写表格(新操作)并点击提交(创建操作)

2)用户被重定向到其编辑页面(编辑操作使用由模型创建的edit_id,而不是Rails自动生成ID),该信息显示用户已提交的信息

3)用户可以选择更改信息(更新操作)并重新提交

在此版本中,即使用户在编辑页面中未进行任何更改并提交,该页面仍将闪烁成功警报。

从数据库的角度来看,我并不在乎,因为既然表单是用用户的信息预先填充的,所以update_attributes方法只是用相同的信息覆盖了旧的信息。

但是从用户的角度来看,这很烦人,因此我想确保仅在用户实际更改某些内容时才更新信息并闪烁成功警报。

我认为这真的很容易,从此更改旧代码:

def update
@request = Request.find_by_edit_id(params[:edit_id])
if @request.update_attributes(request_params)
flash[:success] = true
redirect_to edit_request_path(@request.edit_id)
else
render 'edit'
end
end


并在“ if”中添加一个附加组件,如下所示:

def update
@request = Request.find_by_edit_id(params[:edit_id])
if @request.update_attributes(request_params) && @request.changed?
flash[:success] = true
redirect_to edit_request_path(@request.edit_id)
else
render 'edit'
end
end


但这行不通。现在发生的事情是,在编辑页面上,如果我不更改任何信息并点击提交,则什么也没有发生(很好),但是,如果我更改信息并点击提交,则仍然没有任何结果(不好)。我究竟做错了什么?

注意:我最初认为这是一个操作顺序错误,所以我将其设置为嵌套,首先是@ request.update_attributes,然后是@ request.changed,但这是行不通的...

最佳答案

update_attributes方法将'save'调用作为其方法的一部分,如果保存成功,则返回true。我认为您正在使用assign_attributes寻找类似的内容:

def update
@request = Request.find_by_edit_id(params[:edit_id])
@request.assign_attributes(request_params)

if @request.changed?
if @request.save
flash[:success] = true
redirect_to edit_request_path(@request.edit_id)
else
render 'edit'
end
else
# Action if no change has been made
end
end

关于ruby-on-rails - 仅当属性已更改时才更新用户的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com