【发布时间】:2021-05-04 08:29:35
【问题描述】:
我在这里有一个令人头疼的问题,我确信它很简单,我只是在俯瞰。考虑以下模型:
class Flag < ActiveRecord::Base
belongs_to :user
belongs_to :flaggable, polymorphic: true
validates :reason, presence: true
validates :flaggable_id, presence: true
validates :flaggable_type, presence: true
before_create :allow_unique_only
private
def allow_unique_only
errors.add(:base, "You have already flagged this.") if self.user.flagged?(self.flaggable)
Rails.logger.debug("Errors: #{errors.full_messages}")
Rails.logger.debug("Valid: #{valid?}")
end
end
非常简单。除非我执行此操作,否则它会将错误添加到 base 并在控制台中按应有的方式向我提供错误输出,但它也表明该对象是有效的。
Errors: ["You have already flagged this."]
Valid: true
而且它可以节省!什么给了?
编辑:我知道我可以通过在该方法的末尾添加类似errors.empty? 的内容来使其工作,我只是想了解为什么它是ActiveRecord 认为有效。
【问题讨论】:
标签: ruby-on-rails activerecord