我有一个简单的 Rails 应用程序,其中包含项目和阶段模型。一个项目可以拥有多个阶段,但一次只能有一个阶段处于活动状态(即“当前”)。我仍然希望其他阶段可访问,但是当前阶段应该是应用程序的主要锚点。如何实现“有多个但只有一个当前关联”的要求对于处理模型访问、验证以及创建更新的视图/表单方式等方面具有重大影响。因此,问题是:如何在不增加过多复杂性的情况下实现这一目标?主要目标是:简化访问当前阶段 + 确保一次只能存在一个活动阶段。
自然而然地,我自己也有一些想法,并提出了三个选项,我想在这里介绍一下。如果您有任何反馈意见,比如为什么应该选择一个选项而不是另一个选项(或者建议更简单的解决方案),那将不胜感激: 第一种选择:
自然而然地,我自己也有一些想法,并提出了三个选项,我想在这里介绍一下。如果您有任何反馈意见,比如为什么应该选择一个选项而不是另一个选项(或者建议更简单的解决方案),那将不胜感激: 第一种选择:
[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返回一个数组,如果我没记错的话。
非常感谢您的帮助。谢谢!
更新
添加了奖励以鼓励对该主题提出更多意见。奖励将授予最能解决上述主要目标的解决方案;或者如果没有提到其他解决方案,则授予最好地解释为什么我应该优先考虑给定选项的答案。谢谢!