Unterklassifizieren von Modellen in Rails

7

Ich habe zwei Modelle, Artikel und Rezept, die ein paar gleiche Attribute und Methoden haben. Ich möchte die Unterklassen einer neuen Klasse "Post" machen und alle ihre gemeinsame Logik dorthin verschieben, damit ich keinen doppelten Code pflege. Ich habe es versucht:

%Vor%

Alle diese Klassen befinden sich im Standardordner ./app/models. Dieser Code löst jedoch einen ActiveRecord :: StatementInvalid-Fehler aus, wenn ich beispielsweise zu / articles / new gehe. Der Fehler ist:

  

Die Tabelle 'Beiträge' konnte nicht gefunden werden

Irgendeine Idee, wie Sie das einrichten?

    
weotch 31.01.2011, 15:29
quelle

2 Antworten

9

Warum verwenden Sie keine Module?

%Vor%     
Simone Carletti 31.01.2011, 15:33
quelle
13

Rails verwendet standardmäßig das "Single Table Inhritance" -Muster (einfach googlen). Wenn Sie also ein Modell erstellen, verwenden alle resultierenden Modelle dieselbe Datenbanktabelle (in diesem Fall posts ). Sie können alle Ihre allgemeinen Methoden und Validierungen in das Post -Modell und spezifische in die anderen Klassen einfügen, aber alle diese Klassen haben Zugriff auf die jeweils anderen Felder, da sie dieselbe Tabelle haben (das ist aber kein großes Problem) .

Wenn Sie nur Code (Methoden) freigeben möchten, sollten Sie einige gängige Methoden lieber in ein Modul in einer Datei im Verzeichnis lib einfügen und in jedes Modell einfügen. Oder Sie könnten die Moduldefinition ganz oben platzieren, wenn Sie alle Modelle wie in Ihrem Beispiel in einer einzigen Datei speichern.

    
Matt 31.01.2011 15:48
quelle