Ruby Rails将子错误与父错误合并
我有以下两种(消毒/样式化)型号: 预期的行为是,模型应该在验证时返回false,并将子消息连接到父错误散列中,并将其传递给控制器 相反,页面无法使用422保存(这很好)(这很奇怪),并且无法传递消息 通过在上述代码中添加Ruby Rails将子错误与父错误合并,ruby,ruby-on-rails-3,validation,associations,rails-activerecord,Ruby,Ruby On Rails 3,Validation,Associations,Rails Activerecord,我有以下两种(消毒/样式化)型号: 预期的行为是,模型应该在验证时返回false,并将子消息连接到父错误散列中,并将其传递给控制器 相反,页面无法使用422保存(这很好)(这很奇怪),并且无法传递消息 通过在上述代码中添加put语句,我确定: 1) 中的if条件验证每个是否成功,并且记录.错误数组因此在监考签名模型内设置 2) 在validate do循环中,监考员分配有效且无错误 3) 验证do循环在验证每个循环之前运行 因此,问题是:我如何确保驾驶考试验证监考,并将其错误消息合并到自己的错误
put
语句,我确定:
1) 中的if条件验证每个
是否成功,并且记录.错误
数组因此在监考签名
模型内设置
2) 在validate do
循环中,监考员分配有效且无错误
3) 验证do
循环在验证每个
循环之前运行
因此,问题是:我如何确保驾驶考试验证监考,并将其错误消息合并到自己的错误哈希中。请参阅有关stackoverflow的问题:
它与您想要的类似。我提到了上面的stackoverflow post,事实上它包含在我的驱动控制器的validate循环中。但是,这似乎并不能解决我的问题。
错误。已从Rails 3.0及更高版本中删除了add_to_base
,应替换为:errors[:base]
class DrivingExam < ActiveRecord::Base
belongs_to :dmv_rules
has_many :invigilator_assignments, as: :assignable
has_many :invigilator, through: :invigilator_assignments
validate do |record|
record.invigilator_assignments.each do |i|
next if i.valid?
i.errors.full_messages.each do |msg|
errors.add_to_base(msg)
end
end
end
end
class InvigilatorAssignment < ActiveRecord::Base
attr_accessible :invigilator_id
belongs_to :assignable, polymorphic: true
belongs_to :invigilator
validates :invigilator_id, presence: true
validates_each :invigilator do |record, attr, value|
if record.assignable.is_a?(DrivingExam) && !value.no_scheduling_conflicts?
record.errors.add attr, "This Invigilator has a scheduling conflict"
end
end
end
if @driving_exam.save