Ruby on rails 具有唯一性条件的轨道嵌套形式
Rails 2.3.5,Ruby 1.8.7 我有三个模型,Person、AcademicTerm和PersonTermStatusRuby on rails 具有唯一性条件的轨道嵌套形式,ruby-on-rails,nested-forms,Ruby On Rails,Nested Forms,Rails 2.3.5,Ruby 1.8.7 我有三个模型,Person、AcademicTerm和PersonTermStatus class PersonTermStatus { belongs_to :academic_term belongs_to :person validates_uniquness_of :academic_term_id, :scope => :person_id @ ... } class Person { has_many :per
class PersonTermStatus {
belongs_to :academic_term
belongs_to :person
validates_uniquness_of :academic_term_id, :scope => :person_id
@ ...
}
class Person {
has_many :person_term_statuses
}
在Person记录的动态嵌套表单中,我允许编辑Person\u term\u状态。但如果用户执行以下任一操作,则会出现验证错误:
删除状态并在相同更改中创建具有相同学术术语的新状态。
在两个现有状态之间交换学术术语。
我明白为什么会这样。在1中,标记为删除的状态在验证新状态的唯一性条件之前不会实际删除。在2中,在任何更改之前再次应用唯一性条件,并找到另一个具有相同学术术语的记录
问题是,我想不出解决办法。有已知的解决方案吗
我的嵌套表单实现目前几乎完全使用RailsCast的技术,据我所知,没有解决方法。但是,您可以向数据库添加外键,以在数据库端强制唯一性,然后使用以下方法 向父模型添加before_验证,删除所有子记录并将其重新创建为新记录。然后添加自定义验证函数,根据内存中的内容而不是数据库中的内容手动检查子记录的唯一性 这种方法的缺点包括: 孩子们不保留相同的ID。 创建的时间戳将更改。