让我们考虑以下示例:
class Ball < ActiveRecord::Base
def is_ball?
true
end
end
class BlueBall < Ball
def color
:blue
end
end
class RedBall < Ball
def color
:red
end
end
当我执行Ball.find(id)
时,是否可以返回BlueBall
的实例?
使用Ball.where(owner: some_user).to_a
我可以获得包含BlueBall
和RedBall
个实例的数组吗?
我正在寻找一种通过使用type
之外的其他列来显式设置STI的方法。
答案 0 :(得分:1)
如果可以重命名您的班级Red
和Blue
而不是RedBall
和BlueBall
def Ball < ActiveRecord::Base
self.inheritance_column = :color
def ball?
is_a?(Ball)
end
end
def Red < Ball
# Red#color would return 'Red'
end
def Blue < Ball
# Blue#color would return 'Red'
end