1

我是 Ruby on Rails 的新手,我正在尝试理解抽象类。也许我仍然想到Java结构......

我遵循了许多教程,但仍有一些我需要理解的东西。假设我们要建立一个通讯录。在这个通讯录中,我们有人员和公司。

class Address < ActiveRecord::Base
  belongs_to :addressable, :polymorphic => true
end

class Person < ActiveRecord::Base
  has_one :address, :as => :addressable
end

class Company < ActiveRecord::Base
  has_one :address, :as => :addressable
end

目前一切正常。现在,我们有不同的用户,每个人都有一个通讯录。

class User < ActiveRecord::Base
  has_one :addressbook
end

class Addressbook < ActiveRecord::Base
  has_many ??????
end

无论是个人还是公司,如何列出所有地址?因为我想按字母顺序显示它们...

4

1 回答 1

2

这是您的问题的解决方案:

PersonCompany必须的belongs_to通讯录。一个Addressbook has_many :personshas_many :companies。一个Addressbook has_many :person_addresseshas_many :company_addresses(使用:through

之后,您可以定义一个函数addresses,它是和的person_addresses并集company_addresses

另一种解决方案是为Personand声明一个超类,例如Company命名。Addressable我认为这是一种更漂亮的方式。

class Address < ActiveRecord::Base
  belongs_to :addressable
end

class Addressable < ActiveRecord::Base
  has_one :address
  belongs_to :addressbooks
end

class Person < Addressable
end

class Company < Addressable
end

class User < ActiveRecord::Base
  has_one :addressbook
end

class Addressbook < ActiveRecord::Base
  has_many :addressables
  has_many :addresses, :through => :addressables
end
于 2013-03-19T15:54:21.590 回答