我是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
我不确定出了什么问题,有什么想法吗?
答案 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