5

Sto lavorando con un sito che estrae i feed da molte fonti diverse e quindi li salva in un modello comune, in questo caso è un tratto. Un esempio del codice all'interno della classe FeedEntry potrebbe essere:Modello ereditario, modello di fabbrica e auto-analisi in Ruby-on-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 

Certo io vengo da un background di Java, e in java qui, vorrei impostare un gerarchia eredità, e poi su ogni sottoclasse di FeedEntry estendere la analizzare il metodo in modo che ogni FeedEntry sapesse come analizzarsi. Quindi le mie domande:
1) Si tratta di un piano fattibile in binari?
2) In tal caso, si dovrebbe includere solo una colonna che era fondamentalmente "tipo" che diceva quale sottoclasse era FeedEntry?
3) In caso negativo, qualche suggerimento sul modo DRYest per farlo?

Grazie!

risposta

2

Penso che sia possibile utilizzare l'ereditarietà di tabelle singole fornite da rotaie. Riferimento: http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/ e http://api.rubyonrails.org/classes/ActiveRecord/Base.html.

Successivamente è possibile aggiungere il metodo di analisi in ciascuna delle classi "ereditate". Potresti voler aggiungere un callback before_save e chiamare self.parse. Non sono sicuro che questo sia il modo più esatto per farlo .. sarebbe interessante vedere cosa dicono gli altri.

Problemi correlati