我的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
它有效,但我想这是更好的方法。也许有人知道更好的解决方案?
由于
汤姆
答案 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作为“用户”。