覆盖模型中的保存方法

Overriding save method in model

我是 Ruby/Rails 的新手,我想覆盖 save 方法,这样我就可以在调用实际的 save 方法之前对自己进行一些检查,但是,我由于某种原因出现此异常:

#<NoMethodError: undefined method `save' for true:TrueClass>

这是我的模块代码 class。

模块:

module OverrideSave

    def save
        super.save if some_condition_true
    end
  end

Class:

class CardTransaction
  include Mongoid::Document
  include Mongoid::Timestamps::Created
  prepend OverrideSave

  field :type, type: String
  field :transaction_value, type: BigDecimal
  field :receipt_value, type: BigDecimal
  field :store_id, type: String

  belongs_to :card
end

我不确定哪里出了问题,有什么想法吗?

为什么要尝试在 super(即 save)returns 上调用 save?根据你的描述,你想要这样的东西:

def save
  # some additional work
  super
end

如@Marek所述

module OverrideSave

    def save
        super if some_condition_true
    end
end

但是覆盖save方法不是好的行为,最好创建一个使用save方法的新方法,所以你仍然有save方法。

module OverrideSave
  def save_with_guard
     save if some_condition_true
  end
end

您不需要重写上面的 save 方法。您可以在模型中使用 before_save callback

class CardTransaction
  before_save :do_some_validation

  private

  def do_some_validation
    # will get there before the save is called
    false if custom_validation
  end
end