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

kak*_*bei 5 activerecord padrino ruby-on-rails-3.2

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

如何使用Rails(ActiveRecord)执行此操作?

我不想为if表中的每一列创建语句,并且我猜想如果我将ActiveRecord哈希传递给update_attributes方法,必须有一种方法.

谢谢.

Isa*_*esh -2

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

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
Run Code Online (Sandbox Code Playgroud)

这将获取您想要更新的属性的哈希值,并仅传递最初为零的属性。它用于ActiveModel::Dirty“#{v}_was”方法。

  • 谁对这个答案投了反对票,您愿意分享一下原因吗?如果我不知道问题出在哪里,我就无法改进答案。 (2认同)