当前位置 : 主页 > 编程语言 > ruby >

ruby-on-rails – HABTM 2表2种不同的关系

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个服务类型表,其中包含几十个服务的ID和名称. 我有一个Projects表,必须有一个Proposed Services列表和一个Accepted Services列表. 我知道我会在两侧使用HABTM,其间有一个project_service_types表
我有一个服务类型表,其中包含几十个服务的ID和名称.

我有一个Projects表,必须有一个Proposed Services列表和一个Accepted Services列表.

我知道我会在两侧使用HABTM,其间有一个project_service_types表.

当我在同一个表之间有两个不同的关系时,我无法弄清楚要做什么.我怀疑它使用:join_table和:associated_forign_key,但我不能让它在我的应用程序中工作.

谢谢.

虽然你可以用habtm来解决这个问题,但你所说的是has_many:through的用例.您想要附加一些信息以及关系.为此,您需要创建一个表示关系的连接模型.

最后,您可以将服务提案视为域中的一流“事物”.接受服务后,您只需更改状态即可.这也节省了连接.

移民

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
网友评论