有没有办法让ActiveRecord返回其他类的实例,而不是调用一个find?

时间:2012-11-14 12:35:12

标签: activerecord

让我们考虑以下示例:

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我可以获得包含BlueBallRedBall个实例的数组吗?


我正在寻找一种通过使用type之外的其他列来显式设置STI的方法。

1 个答案:

答案 0 :(得分:1)

如果可以重命名您的班级RedBlue而不是RedBallBlueBall

,这可能会有效
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