加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:49:10 所属栏目:百科 来源:网络整理
导读:我的项目的原始,愉快的工作版本看起来像这样: 1)用户填写表单(新动作)并点击提交(创建动作) 2)用户被重定向到他们的编辑页面(编辑操作使用由模型创建的edit_id,而不是Rails auto-gen id),这显示了用户已经提交的信息 3)用户可以选择更改信息(更新动作)并重
我的项目的原始,愉快的工作版本看起来像这样:

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

2)用户被重定向到他们的编辑页面(编辑操作使用由模型创建的edit_id,而不是Rails auto-gen 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,第二个if @ 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读