我有一个简单的rails应用程序与模型项目和阶段.一个项目有许多阶段,但是只能在同一时刻才能有效(即“当前”).我仍然希望其他阶段可以访问,但是当前阶段应该是应用程序的主要锚点.关于如何实现此要求的决定对于如何处理模型访问,验证和视图/表单以进行创建更新具有重大意义.
所以问题是:如何实现这个“has_many但只有一个当前的关联”,而不增加太多的复杂性?主要目标是:简化当前阶段的访问,确保一次不能超过1个活动阶段.
当然,我自己也有一些想法,想出三个选择,我想在这里介绍一下.任何关于为什么我应该选择一个选项(或更简单的解决方案的建议)的反馈将不胜感激:
第一选择:
[Project] has_many :phases [Project] has_one :current_phase,:class_name => "Phase",:conditions => { :current => true }
缺点:我有一个用于创建项目和相应阶段的嵌套表单.似乎没有简单的方法将刚创建的阶段之一设置为活动状态
第二选择:
[Project] has an attribute "current_phase_id" [Project] has_many :phases [Project] belongs_to phase,:foreign_key => "current_phase_id"
缺点:与选项1相同,但我有另一个属性和belongs_to关联,这似乎很奇怪(为什么一个项目属于其中一个阶段?)
第三选择:
[Phase] has an attribute "active" (boolean) [Phase] scope :active,:conditions => { :active => true} # Access to current phase via: project.phases.active
缺点:我必须通过验证确保一次只有一个活动阶段,如果在从一个阶段切换到另一个阶段的同时创建/编辑多个阶段,则很难;加:project.phases.active返回数组,如果我没有错误
您的帮助非常感谢.谢谢!
更新
增加了一个奖励来鼓励对这个话题的进一步意见.赏金将被授予最佳解决上述主要目标的解决方案;或者如果没有提及其他解决方案,那么最好的解释是为什么我应该赞成一个给定的选择.谢谢!