我可以在Rails中确定验证错误消息的顺序吗?

时间:2017-07-05 20:59:09

标签: 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

在一种形式中,我们可能必须为这三个属性获取属性,因此我们得到如下的参数:

{"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"]`

错误会以相同的顺序显示在页面上。

没有黑客攻击消息对象,有没有办法告诉Rails哪些命令将消息放入,或者至少应该先出现哪些出质人错误和公司错误?

1 个答案:

答案 0 :(得分:0)

不,它们以哈希值返回,哈希值不提供可靠的排序。这可以被覆盖,这通常通过将文件添加到lib文件夹并在rails配置中指定覆盖来完成。

编辑根据Ruby 1.9.3以后的评论,哈希实际上是有序的,所以忽略我说的话。