覆盖模型中的保存方法

时间:2018-05-15 11:40:53

标签: ruby-on-rails ruby mongoid

我是Ruby / Rails的新手,我想覆盖save方法,所以在调用实际的save方法之前我可以自己做一些检查,但是,我得到了这个例外某种原因:

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

这是我的模块和类的代码。

模块:

module OverrideSave

    def save
        super.save if some_condition_true
    end
  end

类别:

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

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

3 个答案:

答案 0 :(得分:4)

为什么您尝试在save(即super)返回时调用save?根据您的描述,您需要这样的内容:

def save
  # some additional work
  super
end

答案 1 :(得分:2)

您不需要覆盖上面的before_save方法。您可以在模型中使用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 callback

var received = 0;

while (received < 10) {
    getMessage();
}

function getMessage() {
    $.ajax({
        url: '/Home/getData/',
        type: "GET",
        success: function(result) {
            received += 1;
        }
    });
    console.log(received);
}
}
});
}

答案 2 :(得分:1)

正如@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