Rails验证:在创建的同时更新

时间:2014-11-18 19:24:13

标签: ruby-on-rails ruby validation

我在尝试弄清楚如何订购ActiveRecord写入以使我的验证变得愉快时遇到了一些麻烦,而且我不确定该搜索何种问题。

问题是在请求发生之前,一切都会有效;转换发生后,一切都会再次有效;但是当转换发生时,由于它影响了多个模型实例,如果我逐个更新每个模型而不同时考虑这两个更改,数据库将进入无效状态。我喜欢一些建议!

背景

我有一个名为HelpRequest的模型,另一个名为HelperAssignments

规则是HelpRequest可能有0或1 有效 HelperAssignment。但如果Helper无法完成请求,则可能会将其重新分配给另一个Helper,从而创建新的HelperAssignment。由于我们需要特定HelpRequest的分配历史记录,HelperAssignment可能会有多个HelpRequest,但只有一个是有效的。

因此,HelperAssignment表具有一些相关属性:

  • help_request_id:指与此作业相对应的HelpRequest
  • close_status:如果设置为reassigned,则reassignment_id必须存在。
  • reassignment_id:对于给定的help_request_id,只有一个可能是nil(即它是当前有效的作业)

问题

重新分配时......

  • ...如果我先创建新的HelperAssignment,则会中断验证,因为请求中会有多个有效HelperAssignment :(
  • ...如果我先将旧的HelperAssignment更新为close_status reassigned,那么新的HelperAssignment将不存在,所以我无法获得它的ID,因此验证将失败。

有没有惯用的方法来进行这种转变?我想避免a)禁用此特定类型请求的验证,或b)为“正在重新分配”添加额外的数据库状态。看起来在Rails中强制引用完整性可能会让Rails变得有点棘手...提前感谢!

0 个答案:

没有答案