2013-08-13 2 views
1

Мне нужно изменить класс каждого результата, возвращаемого в активном запросе записи. Я бы хотел, чтобы каждый случай выполнялся, и результаты возвращались. К сожалению, я не могу использовать STI для этого. Например:Rails, работает после поиска

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>] 
+1

Что бы вы ни хотели, пожалуйста, сделайте это более понятным, у меня есть ** нет ** подскажите, что вы просите. –

+0

Мой пример ressult не был опубликован. см. выше. –

ответ

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 
Смежные вопросы