Rails(ActiveRecord)合并或如何仅更新表中的空值

Rails(ActiveRecord)合并或如何仅更新表中的空值,activerecord,ruby-on-rails-3.2,padrino,Activerecord,Ruby On Rails 3.2,Padrino,使用Mysql,我可以使用COALESCE只更新表中emtpy的值 如何使用Rails(ActiveRecord)实现这一点 我不想为表中的每一列创建if语句,我猜如果我将ActiveRecord散列传递给update\u attributes方法,肯定会有办法做到这一点 谢谢 你问的不太清楚,但如果我理解正确,你想要这样的东西: class Address < ActiveRecord::Base attr_accessible :street, :city, :zip def

使用Mysql,我可以使用
COALESCE
只更新表中emtpy的值

如何使用Rails(ActiveRecord)实现这一点

我不想为表中的每一列创建
if
语句,我猜如果我将ActiveRecord散列传递给
update\u attributes
方法,肯定会有办法做到这一点


谢谢

你问的不太清楚,但如果我理解正确,你想要这样的东西:

class Address < ActiveRecord::Base
  attr_accessible :street, :city, :zip
  def update_null_attributes(hash)
    update_attributes(hash.keep_if { |k,v| __send__("#{v}_was").nil? })
  end
end
类地址

这将获取要更新的属性的散列,并仅传递最初为零的属性。它用于“#{v}u was”方法。

无论谁否决了这个答案,你愿意分享原因吗?如果我不知道答案出了什么问题,我就无法改进它。这很可能被否决,因为它不是原子的。如果两个资源同时读取同一条记录,您将丢失第一次写入。你需要锁定记录。