5

Pracuję z witryną, która będzie pobierała kanały z wielu różnych źródeł, a następnie zapisuje te strumienie we wspólnym modelu, w w tym przypadku jest to cecha. Przykładem kodu od wewnątrz klasy FeedEntry może być:Dziedziczenie modelu, wzór fabryczny i samoczynne przetwarzanie w Ruby-Rails

feed = Feedzirra::Feed.fetch_and_parse(feed_url) 
add_entries(feed.entries) 
... 

def self.add_entries(entries) 

    entries.each do |entry| 
     # Should know how to parse itself into a trait   
     @trait = parse(entry) 
     if @trait.save 
     ... 
    end 
end 

Wprawdzie pochodzę z tła java, aw java tutaj, chciałbym założyć heirarchy dziedziczenia, a następnie na każdej podklasy FeedEntry przedłużyć parsować metodę, aby każdy element FeedEntry wiedział, jak samemu parsować. Więc moje pytania:
1) Czy jest to wykonalny plan w szynach?
2) Jeśli tak, czy należałoby po prostu dołączyć kolumnę, która była w zasadzie "typ", który powiedział, co podklasa FeedEntry było?
3) Jeśli nie, wszelkie sugestie na temat DRYest sposobem to zrobić?

Dzięki!

Odpowiedz

2

Sądzę, że można użyć dziedziczenia z pojedynczego stołu dostarczanego przez szyny. Patrz: http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/ i http://api.rubyonrails.org/classes/ActiveRecord/Base.html.

Następnie można dodać metodę analizowania w każdej z "odziedziczonych" klas. Możesz dodać wywołanie zwrotne before_save i wywołać self.parse. Nie jestem pewien, czy jest to najbardziej DRYest sposób to zrobić .. byłoby interesujące zobaczyć, co inni mówią.