我有用户,他们有宠物.各种各样的宠物.爬行动物、鱼、鸟和哺乳动物.哺乳动物模型有两个子类,通过单表继承(STI)继承:cat 和狗.我的用户有一种方法可以得到他们的最后一只宠物.
在静态页面控制器中,我有一个方法来访问用户的最后一个宠物:
def go_to_pet
redirect_to current_user.last_pet || root_path
end
现在我遇到的问题是,当一只cat 或一只狗被作为用户的最后一只宠物返回时,应用程序正在寻找cat 或狗的控制器,但我只有而且需要一个哺乳动物控制器.当哺乳动物控制器被实际调用时,它可以很好地处理cat 和狗.
我的问题是:如何检索Mammal类的实例?我try 过MamMal.find(cat.id),但它会自动返回一只cat ,因为这就是STI的全部意义所在.
我能想到的唯一难看的解决办法是判断静态页面控制器中的类(在上面的代码块中),然后让reDirect_使用哺乳动物控制器,但我想避免这种情况.
我试图通过MamMal.find(cat.id)显式加载基类,但它根据类型列自动返回继承类Cat的一个实例.我曾希望得到一个哺乳动物类的实例.