¿Cuál es la "forma de los rieles" para hacer cumplir una asociación has_many but has-only-one-current?

Tengo una aplicación de rieles simple con modelos de proyecto y fase. Un proyecto tiene muchas fases, pero solo una fase puede estar activa (es decir, "actual") a la vez. Todavía quiero que las otras fases sean accesibles, pero la fase actual debería ser el ancla principal de la aplicación. La decisión sobre cómo implementar este requisito tiene implicaciones importantes sobre cómo manejo el acceso al modelo, las validaciones y las vistas / formularios para la actualización de la creación.

Así que la pregunta es: ¿Cómo puedo lograr esta "asociación de has_many but has-only-one-current" sin agregar demasiada complejidad? Los objetivos principales son: simplicidad en el acceso a la fase actual + asegurando que no puede haber más de 1 fase activa a la vez.

Naturalmente, tuve algunas ideas y se me ocurrieron tres opciones, que quiero presentar aquí. Cualquier comentario sobre por qué debería elegir una opción sobre la otra (o sugerencia de una solución más simple) sería apreciada:

Primera opción

[Project] has_many :phases
[Project] has_one  :current_phase, :class_name => "Phase", :conditions => { :current => true }

Drawback: tengo un formulario anidado para crear proyectos y las fases correspondientes. Parece que no hay una manera fácil de configurar exactamente una de las fases recién creadas como activa

Segunda opción

[Project] has an attribute "current_phase_id"

[Project] has_many :phases
[Project] belongs_to phase, :foreign_key => "current_phase_id"

Drawback: igual que la opción 1, pero tengo otro atributo y una asociación belong_to, lo que parece extraño (¿por qué un proyecto debería pertenecer a una de sus fases?)

Tercera opción:

[Phase] has an attribute "active" (boolean)
[Phase] scope :active, :conditions => { :active => true}

# Access to current phase via: project.phases.active

Drawback: Tengo que asegurarme a través de las validaciones de que solo hay una fase activa a la vez, lo cual es difícil si se crean / editan varias fases al mismo tiempo O durante el cambio de una fase a otra; plus: project.phases.active devuelve una matriz, si no me equivoco

Tu ayuda es muy apreciada. ¡Gracias

Actualiza

Agregó una recompensa para alentar más opiniones sobre el tema. Se otorgará recompensa a la solución que mejor aborde los objetivos principales expresados anteriormente; o si no se menciona una solución alternativa, la respuesta que mejor explica por qué debería favorecer una de las opciones dadas sobre la otra. ¡Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta