我正在尝试为可以在rails_admin
中创建的对象创建回调。我是我的模型我有以下before_save回调。
def check_remaining
if c.purchased_a == 0
errors.add(:base, "Some error message here")
end
end
如果用户去创建所述对象时回调条件为真,我试图获取rails_admin中显示的错误消息。在他们点击保存之后,我希望显示错误消息,但实际上会创建对象。
答案 0 :(得分:1)
保存前请勿使用before_save
验证模型。您应该使用validate
代替。尝试这样的事情:
class Foo < ActiveRecord::Base
belongs_to :c # As you mark somewhere.
validate :check_remaining
def check_remaining
errors.add(:base, "Some error message here") if c.purchased_a == 0
end
end
<强>解释强>
validate用于向模型添加自定义验证。即使未保存模型,也会发生这种情况。您可以使用model.errors
每次检查模型错误。
before_save
回调happens after模型验证。因此,在那里进行验证,根本不起作用,因为它们不会被评估。当您想要设置属性,或计算某些值以及类似的东西时,会使用before_save
。
希望这对你有帮助!
答案 1 :(得分:0)
由于C是此对象所属的另一个模型,因此将if语句更改为:
if self.c.purchased_a == 0
答案 2 :(得分:0)
在模型中捕获错误的标准方法:
如此处所述ActiveModel::Errors < Object
class Foo < ActiveRecord::Base
# Required dependency for ActiveModel::Errors
extend ActiveModel::Naming
def initialize
@errors = ActiveModel::Errors.new(self)
end
attr_accessor :purchased_a
attr_reader :errors
def validate!
errors.add(:purchased_a, "Some error message here") if c.purchased_a == 0
end
end
以上允许你这样做:
Foo = Foo.new
Foo.validate! # => ["Some error message here"]
Foo.errors.full_messages # => ["purchased_a Some error message here"]
我不确定 c.purchased_a 中 c 的来源是什么或在哪里。 请修改它的代码。