rails 4:多态集基类类型而不是继承

时间:2014-05-06 16:17:04

标签: ruby-on-rails ruby sti polymorphism

我的rails关系有问题。我有基础模型ant他继承的版本

class User < ActiveRecord::Base
end

class Admin < User
end

接下来我有多态关联的会员模型

class Membership < ActiveRecord::Base
  belongs_to :group
  belongs_to :membershipable, polymorphic: true
end

当我尝试创建成员模型的新实例时,通过键入例如

Membership.new group: Group.first, membershipable: Admin.first

membershipableable_type设置为“User”而不是“Admin”。所以我创建了before_validation回调

def proper_sti_type
  self.membershipable_type = memebrshipable.class.name
end

它有效,但我想这是更好的方法。也许有人知道更好的解决方案?

由于

汤姆

1 个答案:

答案 0 :(得分:0)

您需要在User模型中添加此内容才能将membershipable_type设为'Admin'

class User < ActiveRecord::Base
  has_many :memberships, as: :membershipable
end

这是因为您正在从用户扩展管理模型,因此它必须与成员资格模型关联。 然后当你这样做时:

Membership.new group: Group.first, membershipable: Admin.first

您将获得memberable_type作为“用户”。