Rails ActiveRecord:与同一模型的2个关联

时间:2014-06-18 18:49:13

标签: ruby-on-rails activerecord

我有一个模型Project,它有两个属于同一模型的belongs_to关联:

belongs_to :source_connection, class: Connection
belongs_to :destination_connection, class: Connection

但另一方面,每个连接应该只与项目有一个关联。添加

has_one :project, foreign_key_id: source_connection_id
or
has_one :project, foreign_key_id: destination_connection_id

不会削减它,因为连接本身不知道它是源连接还是目标连接。

显然,我设计这种关联的方式有一个缺陷,我只是想知道正确的方法是什么。值得一提的是“Connection”有很多继承类(SSHConnection,S3Connection等),因此将Connection类拆分为“Source”和“Destination”Connection模型会导致大量重复。

欢迎任何想法。

2 个答案:

答案 0 :(得分:1)

你很亲密!您可以重新设计,或者您可以尝试以不同的方式为不同的连接类型命名项目:

has_one :source_project, class: "Project", foreign_key_id: source_connection_id
or
has_one :destination_project, class: "Project", foreign_key_id: destination_connection_id

这允许您调用@ connection.source_project来获取该连接是源连接的项目,例如。可能有更明确的方法来为您的目标命名。

答案 1 :(得分:0)

从Rails 4.2.5开始,命名关联的语法与接受的答案略有不同,新版本将是:

has_one :source_project, class_name: "Project", foreign_key: :source_connection_id
or
has_one :destination_project, class_name: "Project", foreign_key: :destination_connection_id