1

アクティブなレコード クエリで返される各結果のクラスを変更する必要があります。クエリが実行され、結果が返されるたびに発生したいと思います。残念ながら、STI を使用してこれを達成することはできません。例えば:

class Foo < ActiveRecord::Base

   after_find :becomes_a_subclass

   def becomes_a_subclass
      becomes [Bar, Baz, Raz].sample
   end

end

class Bar < Foo ; end
class Baz < Foo ; end
class Raz < Foo ; end

私は、以下が与えられた結果を返すことを期待しています:

=> Foo.all
[#<Bar id: 1>, #<Baz id: 2>, #<Bar id: 3>, #<Raz id: 4>]
4

1 に答える 1

1

discriminate_class_for_record(record)でクラス メソッドを実装する必要がありますFoo。これにより、レコードのサブクラスが返されます。実装例:

class Foo < ActiveRecord::Base

  def self.discriminate_class_for_record(record)
    if record['foobar']
      [Bar, Baz, Raz].sample
    else
      super
    end
  end

end

class Bar < Foo ; end
class Baz < Foo ; end
class Raz < Foo ; end
于 2017-03-22T15:35:36.570 に答える