在 rails 管理中显示来自 before_save 回调的错误
Display error from before_save callback in rails admin
我正在尝试为可以在 rails_admin
中创建的对象创建回调。我是我的模型,我有以下 before_save 回调。
def check_remaining
if c.purchased_a == 0
errors.add(:base, "Some error message here")
end
end
如果用户创建所述对象时回调中的条件为真,我会尝试在 rails_admin 中显示错误消息。在他们点击保存后,我希望显示错误消息,但实际创建了对象。
由于 C 是该对象所属的另一个模型,您将 if 语句更改为:
if self.c.purchased_a == 0
不要在保存前使用 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
用于设置一个属性,或者计算一些值,诸如此类。
希望对您有所帮助!
模型中捕获错误的标准方法:
如此处所述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 的来源是什么或哪里。
请修改它的代码。
我正在尝试为可以在 rails_admin
中创建的对象创建回调。我是我的模型,我有以下 before_save 回调。
def check_remaining
if c.purchased_a == 0
errors.add(:base, "Some error message here")
end
end
如果用户创建所述对象时回调中的条件为真,我会尝试在 rails_admin 中显示错误消息。在他们点击保存后,我希望显示错误消息,但实际创建了对象。
由于 C 是该对象所属的另一个模型,您将 if 语句更改为:
if self.c.purchased_a == 0
不要在保存前使用 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
用于设置一个属性,或者计算一些值,诸如此类。
希望对您有所帮助!
模型中捕获错误的标准方法:
如此处所述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 的来源是什么或哪里。 请修改它的代码。