我有一个模型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模型会导致大量重复。
欢迎任何想法。
答案 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