【问题标题】:Rails (ActiveRecord) coalesce or how to update only empty values in a tableRails(ActiveRecord)合并或如何仅更新表中的空值
【发布时间】:2012-11-10 02:59:21
【问题描述】:

使用 Mysql,我可以使用 COALESCE 仅更新表中的空值。

如何使用 Rails (ActiveRecord) 做到这一点?

我不想为表中的每一列创建if 语句,并且我猜测如果我将 ActiveRecord 哈希传递给update_attributes 方法,就必须有办法做到这一点。

谢谢。

【问题讨论】:

    标签: activerecord ruby-on-rails-3.2 padrino


    【解决方案1】:

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

    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
    

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

    【讨论】:

    • 谁对这个答案投了反对票,你想分享一下原因吗?如果我不知道它有什么问题,我就无法改进答案。
    • 这很可能被否决了,因为它不是原子的。如果两个资源一次读取相同的记录,您将丢失第一次写入。您需要锁定记录。
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2012-07-28
    • 2013-04-13
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多