Хотя вы можете решить эту проблему с помощью habtm, вы говорите о сценарии использования has_many: through. Вы хотите приложить немного информации вместе с отношениями. Для этого вы создаете модель соединения, которая представляет отношение.
В конце концов, это позволяет вам рассматривать ваше предложение по обслуживанию как первоклассную «вещь» в вашем домене. Когда услуга принята, вы можете просто изменить статус. Это также сохраняет соединение.
1006 * Миграция 1007 ** *
create_table :project_services do |t|
t.references :project
t.references :service_type
t.string :status
end
Модель
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