0

让我们考虑以下示例:

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


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

4

1 回答 1

1

如果可以重命名您的类RedBlue不是RedBallandBlueBall

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
于 2012-11-15T04:45:59.107 回答