【问题标题】:Non-polymorphic/Non-STI one-one relationship with activerecord与 activerecord 的非多态/非 STI 一对一关系
【发布时间】:2013-06-11 20:04:40
【问题描述】:

对不起,如果这是一个菜鸟问题,但我在之前的帖子中找不到这个。

我可以用活动记录来实现吗?

我有 3 个表 BranchPersonAddress,具有以下关系:

Branch.Address (one-one)
Person.Address (one-one)

我从文档中知道,这可以实现为多态关联,它在 ADDRESS 表中维护 FK (addressable_id) 以及类型信息 (addressable_type=/Branch/|Person/)。

我想要做的是在BranchPerson 表中都有address_id,并将Address 作为一个独立的表,而不依赖于外部表。我还想保留从Branch/Person 对象控制address 对象的生命周期(级联保存/更新/删除)的能力。

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3.2


    【解决方案1】:

    听起来您只需要指定分支和人员belongs_to 地址

    class Branch < ActiveRecord::Base
      belongs_to :address
    end
    
    class Person < ActiveRecord::Base
       belongs_to :address
    end
    
    class Address < ActiveRecord::Base
      has_one :branch
      has_one :person
    end
    

    这将为您提供一个用于 Branch 和 Person 的方法 #address,并允许您以这种方式与之交互。

    【讨论】:

    • 乔希,感谢您的快速回复。如果我这样做,我是不是在 Address 中没有给出 has_one 关系?
    • 哎呀,我错过了。放置 has_one 是可选的,仅当您需要调用地址#person 或地址#branch 时才需要。我现在已经添加了。
    • 就可以了。感谢乔希的帮助。
    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多