Ruby on rails 多对象Rails上的依赖验证

Ruby on rails 多对象Rails上的依赖验证,ruby-on-rails,ruby,validation,activerecord,Ruby On Rails,Ruby,Validation,Activerecord,我有三个ActiveRecord对象需要作为一个整体进行验证,我还不确定如何建模或实现它 下面列出了模型及其依赖项/验证(伪rails代码): 营地 属于城市 城市 属于国家 在其状态中必须具有唯一的名称 陈述 有许多城市 更新营地记录时,在尝试更新营地记录之前,必须确保城市和州均有效。如果任何一步都失败了,我需要确保没有保存任何内容 我真的很想在这方面得到一些帮助 首先,营地不负责验证其所属的城市或州的有效性。最有可能的是,这些记录是在创建或更新营地时不会更改的现有记录 至于检

我有三个ActiveRecord对象需要作为一个整体进行验证,我还不确定如何建模或实现它

下面列出了模型及其依赖项/验证(伪rails代码):

  • 营地
    • 属于城市
  • 城市
    • 属于国家
    • 在其状态中必须具有唯一的名称
  • 陈述
    • 有许多城市
更新营地记录时,在尝试更新营地记录之前,必须确保城市和州均有效。如果任何一步都失败了,我需要确保没有保存任何内容


我真的很想在这方面得到一些帮助

首先,
营地
不负责验证其所属的
城市
的有效性。最有可能的是,这些记录是在创建或更新营地时不会更改的现有记录

至于检查关联是否已设置,使用Rails 5,任何
所属的
关联都将自动验证关联是否已设置以及记录是否存在。使用Rails 4,您只需在营地内为您的关联添加一个
状态
验证:

belongs_to :city
validates :city, presence: true
要验证某个州内城市名称的唯一性,只需使用范围:

belongs_to :state
validates :name, uniqueness: {scope: :state_id}
对于其他所有内容,
State
确实有责任确保它在创建或更新时有效。除非它的部分有效性来自它与之有关系的子对象集合?在这种情况下,您可以添加一个
验证\u关联的
验证

您可以在此处查看此验证的文档:

基本上,在您的
状态
模型中,您将添加:

has_many :cities
validates_associated :cities
但这只会在更新/创建父对象时检查子对象是否有效,而不是在相反方向