Rails has_many: through und Setting Property im Join-Modell

9

Ähnlich wie diese Frage , wie setze ich in diesem Zusammenhang eine Eigenschaft auf das Join-Modell vor dem Speichern?

%Vor%

Ich möchte das nur können:

%Vor%

Wie würde das funktionieren? Ich habe mir den ganzen Tag den Kopf darüber gestoßen:).

Was momentan passiert ist, wenn ich das mache:

%Vor%

Dann erhält das Join-Modell PostAsset , das erstellt wird, nie die Möglichkeit, context zu setzen. Wie lege ich diese Kontexteigenschaft fest? Es sieht so aus:

%Vor%

Aktualisieren :

Ich habe einen Test Juwel erstellt, um das Problem zu isolieren. Gibt es einen einfacheren Weg dies zu tun?!

Dies ActsAsjoinable :: Core-Klasse macht es so Sie können viele oder viele Beziehungen mit einem Kontext zwischen ihnen im Join-Modell haben. Und es fügt Hilfsmethoden hinzu. Die grundlegenden Tests zeigen im Grunde, was ich versuche zu tun. Gibt es bessere Ideen, wie man das richtig macht?

    
Lance Pollard 21.06.2010, 02:13
quelle

1 Antwort

1

Sehen Sie sich die has_many-Optionen in der ActiveRecord :: Associations :: ClassMethods-API an, die Sie hier finden: Ссылка

Das ist das interessanteste Zitat:

  

: Bedingungen

     

Geben Sie die Bedingungen an, die das zugeordnete Objekt erfüllen muss, damit es als WHERE-SQL-Fragment, z. B. "authorized = 1", enthalten ist. Wenn ein Hash verwendet wird, sind Datensatzkreationen aus der Assoziation beschränkt. has_many: Beiträge,: Bedingungen = & gt; {: veröffentlicht = & gt; true} erstellt veröffentlichte Posts mit @ blog.posts.create oder @ blog.posts.build.

Ich glaube also, dass Ihre Bedingungen als Hash angegeben werden müssen:

%Vor%

Und Sie sollten auch Folgendes tun:

%Vor%

anstelle von:

%Vor%

Dies sollte den Aufbau des gebündelten Vermögenswerts aufrufen, wie im obigen Zitat vorgeschlagen, um das Kontextfeld zu dem Vermögenswert hinzuzufügen. Außerdem werden das Join-Modell-Objekt (post_asset) und das Asset-Objekt gleichzeitig in einer atomaren Transaktion in der Datenbank gespeichert.

    
Patrick Klingemann 21.06.2010 05:21
quelle