我有三个ActiveRecord对象需要整体验证,我还不确定如何建模或实现它。
下面列出了模型及其依赖性/验证(伪轨代码):
更新露营地记录时,必须确保城市和州在尝试更新露营地记录之前有效。如果任何步骤失败,我需要确保没有任何保存。
真的很喜欢这方面的帮助!
答案 0 :(得分:2)
首先,Campground
无需验证其所属City
或State
的有效性。最有可能的是,这些将是您创建或更新露营地时不会发生变化的现有记录。
至于检查已设置的关联,使用Rails 5,任何belongs_to
关联都将自动验证是否已设置关联并且该记录存在。使用Rails 4,您只需在presence
内为您的关联添加Campground
验证:
belongs_to :city
validates :city, presence: true
要验证州内城市名称的唯一性,您只需使用范围:
belongs_to :state
validates :name, uniqueness: {scope: :state_id}
对于其他所有内容,State
确实有责任确保它在创建或更新时有效。除非其有效性的某些部分来自儿童对象的集合,否则它与?有关系?在这种情况下,您可以添加validates_associated
验证。
您可以在此处查看此验证的文档:http://edgeguides.rubyonrails.org/active_record_validations.html#validates-associated
基本上,您可以在State
模型中添加:
has_many :cities
validates_associated :cities
但是这只会在更新/创建父级时检查子级是否有效,而不是相反的方向。