2016-08-01 25 views
0

Ich habe die folgende Zeile in meiner erstellen Aktion:Wie kann ich untergeordnete Objekte mithilfe der .build_-Methoden von Rails instantiieren, wenn ich STI verwende?

@financial_goal = current_user.send("build_#{type.underscore}",financial_goal_params) 

ich Probleme, bin mit der Build-Methode nicht definiert zu werden, weil ich keine gemacht haben: has_one auf meinem User-Modell für all meine STI-Unterklassen.

Wie ich es erklären, ich denke, ich zwei Optionen komme:

A) instanziiert das Objekt direkt aus der Unterklasse, und überspringen build_ mit dann nur die user_id: current_user.id

B anhängen) hinzufügen alle Unterklassen wie has_one unter meinem user.rb, aber das klingt schon schrecklich, da ich jedes Mal, wenn ich eine neue Unterklasse erstelle, die Assoziation hinzufügen muss.

Sieht aus wie Option A ist es?

Antwort

0

Um die Dinge in Bewegung zu bleiben, ich denke, die vernünftigste Art und Weise ist es, die build_ Methoden ausweichen und gehen Sie einfach mit diesem:

@financial_goal = klass.new(financial_goal_params.merge(user_id: current_user.id))