【问题标题】:How to update attributes only if the params are defined?仅在定义参数时如何更新属性?
【发布时间】:2012-06-28 17:36:21
【问题描述】:

目前在我的更新控制器方法中我有:

@group.attributes = {
  :title => params[:group][:title],
  :description => params[:group][:description],
  :password_required => params[:group][:password_required],
  :password => params[:group][:password],
  :archived => params[:group][:archived]
}

问题是这个方法在多个地方使用,并且所有这些参数并不总是被传递,这导致“nil”导致数据库提交回滚。

如何仅在定义属性而无需使用 if 块时才设置属性?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord activemodel


    【解决方案1】:

    可能会做这样糟糕的事情:

    @group.attributes = {
      :title => params[:group][:title] || @group.title,
      :description => params[:group][:description] || @group.description,
      :password_required => params[:group][:password_required] || @group.password_required,
      :password => params[:group][:password] || @group.password,
      :archived => params[:group][:archived] || @group.archived
    }
    

    不推荐这种丑陋的代码,但它回答了如何在没有明确的if 块的情况下做到这一点的问题。

    【讨论】:

      【解决方案2】:

      为什么不简化它

      @group.update_attributes(params[:group])
      

      这样,如果我们的值为零,它不会被更新

      【讨论】:

      • 该代码保存组,如果您想在保存之前进行更多处理,您可以这样做:@group.attributes = params[:group] # more code here... group.save In其实update_attributes方法基本上就是这两行……
      猜你喜欢
      • 2021-10-21
      • 2019-12-02
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多