Rails has_many关系,“many”方面可以是不同类型的?

时间:2014-03-10 17:04:43

标签: ruby-on-rails activerecord

我想使用ActiveRecord来建模以下案例场景:

  

我有一个有很多收藏夹的用户,收藏夹可以是a   个人资料或小组。

关系将是这样的:

models

当我访问用户的收藏夹时;如......

> user.favorites

我应该得到一个包含Profile和/或Group ActiveRecord对象的数组。

[#<Profile id:1 ... >, #<Group id ... >, #<Profile ...>, #<Group ...>]

这可能吗?执行此操作的 Rails-way 是什么?

谢谢你,亲切的问候,

1 个答案:

答案 0 :(得分:0)

您可以使用Polymorphic Associations,如下所示:

class User < ActiveRecord::Base
  has_many :favorites
end

class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :favoriteable, polymorphic: true
end

class Profile < ActiveRecord::Base
  has_one :favorites, as: :favoriteable
end

class Group < ActiveRecord::Base
  has_one :favorites, as: :favoriteable
end

有关示例的详细说明:请阅读Rails官方指南中的Polymorphic Associations