我正在向Rails移植一些功能,我正在使用一个用于评论的现有表。
基本上,有两种类型的评论 - 个人资料评论(photo_id列为空)和照片评论(photo_id列设置为照片的ID)
我通过向表中添加一个类型字段来使单表继承正常工作,但我想知道是否有一种方法可以让我的单表继承在没有类型字段的情况下工作。根据Rails API文档,“如果您没有在表中定义类型列,则不会触发单表继承。在这种情况下,它将像普通子类一样工作,没有特殊魔力来区分他们之间或用find重新加载正确的类型。“
我想知道是否有一种方法可以自定义模型以确定基于photo_id为nil或具有整数值的类型,而不是使用数据库列(如果我不这样做,我宁愿不添加必须。)任何想法?
答案 0 :(得分:1)
如果评论模型没有太大差别,我根本不会打扰单表继承。只需添加:
# to Comment model
belongs_to :photo
belongs_to :profile
# to Profile model
has_many :comments
# to Photo model
has_many :comments
然后:
@photo.comments # will return comments associated with photos
@profile.comments # will return comments associated with profiles
如果同时设置了photo_id和profile_id,则可能会出现问题(我想在您评论与个人资料相关联的照片时可能会发生这种情况),因此您可以更改个人资料模型:
has_many :comments, :conditions => "photo_id is not null"
另一种方法(我认为更好)给你polymorphic associations,但你需要修改你的sql表。
答案 1 :(得分:-1)
我怀疑你不能这么做。但是,一种可能性是将活动记录设置为使用视图而不是表,并编写一些数据库函数以根据设置的id设置此魔术属性。
然而,最后,我怀疑添加色谱柱会更容易,更容易。