Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具有唯一性条件的轨道嵌套形式_Ruby On Rails_Nested Forms - Fatal编程技术网

Ruby on rails 具有唯一性条件的轨道嵌套形式

Ruby 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

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 :person_term_statuses
}
在Person记录的动态嵌套表单中,我允许编辑Person\u term\u状态。但如果用户执行以下任一操作,则会出现验证错误:

删除状态并在相同更改中创建具有相同学术术语的新状态。 在两个现有状态之间交换学术术语。 我明白为什么会这样。在1中,标记为删除的状态在验证新状态的唯一性条件之前不会实际删除。在2中,在任何更改之前再次应用唯一性条件,并找到另一个具有相同学术术语的记录

问题是,我想不出解决办法。有已知的解决方案吗


我的嵌套表单实现目前几乎完全使用RailsCast的技术,

据我所知,没有解决方法。但是,您可以向数据库添加外键,以在数据库端强制唯一性,然后使用以下方法

向父模型添加before_验证,删除所有子记录并将其重新创建为新记录。然后添加自定义验证函数,根据内存中的内容而不是数据库中的内容手动检查子记录的唯一性

这种方法的缺点包括:

孩子们不保留相同的ID。 创建的时间戳将更改。