0

単一テーブル継承 (STI) を使用して、共通の親からサブクラス化されたいくつかのモデルを作成しました。別のモデルは、スーパークラスと関連付けられています。例:次のように...

class Fruit < ActiveRecord::Base
  has_many :smoothies
end

class Apple < Fruit
end

class Banana < Fruit
end

class Smoothie < ActiveRecord::Base
  belongs_to :fruit
end

各サブクラスのメソッドを手動で作成せずに、特定のサブクラスを照会する方法はありますか?

に関連付けられている場合、インスタンスmy_smoothie.appleを取得するために、の行に沿って何かを実行できるようにしたいと考えていますApplemy_smoothieApple

アップデート

some_smoothies.apples私のユースケースは、実際にはスムージーの関係があり、関連付けられたリンゴを含む関係を取得したい場合です。

4

2 に答える 2

0

あなたはこれを行うことができますか?

my_smoothie.fruit.where(type: "Apple")

もちろん、サブクラスの名前を動的に推測する必要がある場合は、使用できます

subclass_object.class.to_s # if you have an instantiated object e.g. of 'apple'
subclass.to_s # if you start form the subclass e.g. of Apple

これで問題ない場合は、名前付きスコープを作成することを検討してください

于 2013-08-02T11:44:20.747 に答える
0

my_smoothie.fruit を実行すると、Apple オブジェクトが返されます (Rails マジックの Fruit オブジェクトではありません)。あなたはそのままでいいのかもしれません。

于 2013-01-09T22:02:01.220 に答える