我有以下两种(消毒/程式化)模型:
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
通过以下方式从DrivingExamController
调用这些:
if @driving_exam.save
预期的行为是模型应该在验证时返回false并将子消息加入父错误哈希并将其传递给控制器。
相反的是,页面无法保存(这很好),使用422(这很奇怪)并且不传递消息。
通过在上面的代码中添加puts
语句,我已经建立了:
1)validates_each
中的if条件成功,因此record.errors
数组设置在InvigilatorAssignment
模型中。
2)在validate do
循环中,监考人员分配有效并且没有错误
3)validate do
循环在validates_each
循环
所以问题是:我如何确保DrivingExam
验证InvigilatorAssignment
并将其错误消息合并到自己的错误哈希中。
答案 0 :(得分:2)
请参阅stackoverflow上的这个问题:
Ruby on Rails: how to get error messages from a child resource displayed?
它与您想要的类似。