rails 4:多态设置基类类型而不是继承
Posted
技术标签:
【中文标题】rails 4:多态设置基类类型而不是继承【英文标题】:rails 4: polymorphic set base class type instead of inherited 【发布时间】:2014-06-23 08:56:05 【问题描述】:我对 Rails 关系有疑问。我有基本模型蚂蚁他继承的版本
class User < ActiveRecord::Base
end
class Admin < User
end
接下来我有具有多态关联的成员模型
class Membership < ActiveRecord::Base
belongs_to :group
belongs_to :membershipable, polymorphic: true
end
当我尝试创建 Membership 模型的新实例时,例如输入示例
Membership.new group: Group.first, membershipable: Admin.first
membershipable_type 设置为“用户”而不是“管理员”。所以我创建了 before_validation 回调
def proper_sti_type
self.membershipable_type = memebrshipable.class.name
end
它有效,但我想这是更好的方法。也许有人知道更好的解决方案?
谢谢
汤姆
【问题讨论】:
Why polymorphic association doesn't work for STI if type column of the polymorphic association doesn't point to the base model of STI? 的可能重复项 【参考方案1】:您需要将其添加到您的用户模型中,以便将 membersable_type 设为“管理员”
class User < ActiveRecord::Base
has_many :memberships, as: :membershipable
end
这是因为您正在从用户扩展您的管理模型,因此它必须与成员模型关联。 然后当你这样做时:
Membership.new group: Group.first, membershipable: Admin.first
您将获得 membersable_type 作为“用户”。
【讨论】:
以上是关于rails 4:多态设置基类类型而不是继承的主要内容,如果未能解决你的问题,请参考以下文章