Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails将子错误与父错误合并_Ruby_Ruby On Rails 3_Validation_Associations_Rails Activerecord - Fatal编程技术网

Ruby Rails将子错误与父错误合并

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循环在验证每个循环之前运行 因此,问题是:我如何确保驾驶考试验证监考,并将其错误消息合并到自己的错误

我有以下两种(消毒/样式化)型号:

预期的行为是,模型应该在验证时返回false,并将子消息连接到父错误散列中,并将其传递给控制器

相反,页面无法使用422保存(这很好)(这很奇怪),并且无法传递消息

通过在上述代码中添加
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