Qual é o "caminho dos trilhos" para impor uma associação has_many, mas possui apenas uma atual?

Eu tenho um aplicativo rails simples com modelos de projeto e fase. Um projeto tem muitas fases, mas somente a fase pode estar ativa (ou seja, "atual") por vez. Ainda quero que as outras fases sejam acessíveis, mas a fase atual deve ser a principal âncora do aplicativo. A decisão sobre como implementar esse requisito tem implicações importantes sobre como eu manejo o acesso ao modelo, validações e visualizações / formulários para atualização da criaçã

Então, a pergunta é: como faço para obter essa "associação has_many mas possui apenas uma atual" sem adicionar muita complexidade? Os principais objetivos são: simplicidade no acesso à fase atual + garantir que não possa haver mais de uma fase ativa por ve

Naturalmente, eu mesmo tive alguns pensamentos e criei três opções, que quero apresentar aqui. Qualquer comentário sobre por que eu deveria escolher uma opção sobre a outra (ou sugestão de uma solução mais simples) seria apreciado:

Primeira opção

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

Drawback: Eu tenho um formulário aninhado para criar projetos e as fases correspondentes. Parece não haver uma maneira fácil de definir exatamente uma das fases recém-criadas como ativa

Segunda opçao

[Project] has an attribute "current_phase_id"

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

Drawback: igual à opção 1, mas tenho outro atributo e uma associação belongs_to, o que parece estranho (por que um projeto deveria pertencer a uma de suas fases

Terceira opção:

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

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

Drawback: Eu tenho que garantir através de validações que existe apenas uma fase ativa por vez, o que é difícil se várias fases são criadas / editadas ao mesmo tempo OU durante a mudança de uma fase para outra; mais: project.phases.active retorna uma matriz, se não me engano

Sua ajuda é muito apreciada. Obrigado

Atualiza

Adicionou uma recompensa para incentivar outras opiniões sobre o tópico. A recompensa será concedida à solução que melhor atenda aos principais objetivos expressos acima; ou se nenhuma solução alternativa for mencionada, para a resposta que melhor explica por que devo favorecer uma das opções fornecidas em detrimento da outra. Obrigado

questionAnswers(3)

yourAnswerToTheQuestion