多态关联或belongs_to关联

时间:2013-11-26 09:40:19

标签: ruby-on-rails polymorphic-associations

在这种情况下我使用多态关联:

class Adress < ActiveRecord::Base
  belongs_to :addressable, polymorphic: true
end

class User < ActiveRecord::Base
  has_many :addresses, as: :addressable
end

我现在想要的是拥有家庭住址和工作地址的用户。 我可以:

class User < ActiveRecord::Base
  has_one :home_address, as: :addressable
  has_one :work_address, as: :addressable
end

但后来我不知道哪一个是家庭住址,哪一个是工作地址​​。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

您有一个Addresses表格,在addressable_type表格中将一个字段保留为“Addresses”。比你能识别不同的地址。

您可以在地址表中包含这些字段,

t.integer :addressable_id
t.string  :addressable_type

或简化版:

t.references :addressable, polymorphic: true

由于

答案 1 :(得分:0)

您可以设置STI。您需要在地址模型中创建type列。

class Adress < ActiveRecord::Base

end

class WorkAddress < Address
   belongs_to :user
end

class HomeAddress < Address
   belongs_to :user
end

class User < ActiveRecord::Base
  has_one :work_address
  has_one :home_address
end