Ruby on rails 我可以确定Rails中验证错误消息的顺序吗?
我希望验证消息的顺序与表单上的顺序相同 我们有三个班:Ruby on rails 我可以确定Rails中验证错误消息的顺序吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我希望验证消息的顺序与表单上的顺序相同 我们有三个班: class User accepts_nested_attributes_for :pledges end class Pledge accepts_nested_attributes_for :companies validates_presence_of :pledgor_surname end class Company validates_presence_of :name end 在一种形式中,我们可能需要为
class User
accepts_nested_attributes_for :pledges
end
class Pledge
accepts_nested_attributes_for :companies
validates_presence_of :pledgor_surname
end
class Company
validates_presence_of :name
end
在一种形式中,我们可能需要为所有三个属性获取属性,因此我们得到如下参数:
{"pledges_attributes"=>
{"0"=>
{"pledgor_surname"=>"",
"id"=>"230",
"companies_attributes"=>
{"0"=>
{"id"=>"125",
"name"=>""
}
}
}
}
}
当我调用@user.update(params)
时,正如我所期望的那样,验证失败。但是errors#full_messages
列表如下所示:
["Company name can't be blank", "Pledgor surname can't be blank"]`
错误以相同的顺序出现在页面上
除了对messages对象进行黑客攻击之外,有没有一种方法可以告诉Rails将消息放在哪个顺序中,或者至少应该先处理哪种质权人错误和公司错误?没有,它们以散列形式返回,而散列不提供可靠的顺序。这可以被覆盖,这通常是通过将文件添加到lib文件夹并在rails配置中指定覆盖来完成的
编辑根据以下自Ruby 1.9.3以来的评论,哈希实际上是有序的,所以忽略我说的 #full_消息将错误转换为一个数组,但在此之前,它们位于一个类似散列的对象中(请参阅
errors[]
)。因此,您可以使用errors.values_at(:name,:姓氏)。展平以与给定键相同的顺序获取错误。请注意,这是非常古老的Rails 3.x验证样式。Rails 4+根据使用验证:sensor_姓氏,presence:true
。您可以按特定顺序提取哈希值。你到底建议@Arepo“重写”什么?另外,Hash
是可靠排序的,因为1.9.3我不知道,多亏了这些信息,我最近才与Go合作,它被有意地洗牌,以防止任何人混淆它的顺序。我将更新我的答案或删除它,如果可能的话。