Alors que vous pouvez résoudre cela avec HABTM, ce dont vous parlez est le cas d'utilisation pour has_many: par. Vous voulez joindre un peu d'information avec la relation. Pour ce faire, créez un modèle de jointure représentant la relation. En fin de compte, cela vous permet de traiter votre proposition de service comme une «chose» de première classe dans votre domaine. Lorsque le service est accepté, vous pouvez simplement changer le statut. Cela enregistre également une jointure.
Migration
create_table :project_services do |t|
t.references :project
t.references :service_type
t.string :status
end
modèles
class ProjectService < ActiveRecord::Base
belongs_to :project
belongs_to :service
end
class Project < ActiveRecord::Base
has_many :project_services
has_many :accepted_services, :through => :project_services,
:conditions => { :status => 'accepted' }
has_many :proposed_services, :through => :proposed_services,
:conditions => { :status => 'proposed' }
end
class Service < ActiveRecord::Base
has_many :project_services
has_many :accepted_projects, :through => :project_services,
:conditions => { :status => 'accepted' }
has_many :proposed_projects, :through => :proposed_services,
:conditions => { :status => 'proposed' }
end
qui ressemble à cela fera l'affaire; la seule chose à savoir est que si vous voulez plus tard avoir des données situées sur l'association elle-même (comme un champ de notes dans le modèle ProjectsProposedTypes), vous voudrez l'option has_many: through détaillée dans ma réponse. Bonne chance pour ton projet! –