Rails verschachtelte Form mit has_many: through, wie Attribute des Join-Modells bearbeitet werden?
So Bearbeiten Sie die Attribute des join-Modell bei Verwendung accepts_nested_attributes_for?
Habe ich 3 Modelle: Themen und Artikeln verbunden durch die Linker
class Topic < ActiveRecord::Base
has_many :linkers
has_many :articles, :through => :linkers, :foreign_key => :article_id
accepts_nested_attributes_for :articles
end
class Article < ActiveRecord::Base
has_many :linkers
has_many :topics, :through => :linkers, :foreign_key => :topic_id
end
class Linker < ActiveRecord::Base
#this is the join model, has extra attributes like "relevance"
belongs_to :topic
belongs_to :article
end
So, wenn ich Baue den Artikel in der "neuen" handeln von den Themen, die controller...
@topic.articles.build
...und machen die geschachtelte form in Themen/neue.html-Code.erb...
<% form_for(@topic) do |topic_form| %>
...fields...
<% topic_form.fields_for :articles do |article_form| %>
...fields...
...Rails erzeugt automatisch den linker, das ist toll.
Nun zu meiner Frage: Mein Linker Modell hat auch die Eigenschaften, die ich möchte in der Lage sein, zu ändern, über die "neues Thema" form. Aber der linker, dass die Schienen automatisch erstellt, null-Werte für alle Attribute außer topic_id und 'article_id' per. Wie kann ich Felder für die anderen linker-Parametern in der "neues Thema" form, so dass Sie nicht come-out-null?
InformationsquelleAutor der Frage Arcolye | 2010-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Herausgefunden, die Antwort. Der trick war:
Baut der Linker, dann baut der Artikel für die einzelnen linker. So, in den Modellen:
Thema.rb muss
accepts_nested_attributes_for :linkers
linker.rb muss
accepts_nested_attributes_for :article
Dann in der form:
InformationsquelleAutor der Antwort Arcolye
Wenn das Formular erzeugt von Schienen eingereicht, die Schienen
controller#action
dieparams
haben eine ähnliche Struktur (einige aus Attribute Hinzugefügt):Bemerken, wie
linkers_attributes
ist eigentlich eine null-indiziertHash
mitString
Tasten, und nicht einArray
? Nun, das ist, weil die Formular-Feld-Schlüssel, die an den server gesendet werden wie folgt Aussehen:Erstellen der Datensatz ist jetzt so einfach wie:
InformationsquelleAutor der Antwort Daniel Doezema
Einen schnellen GOTCHA bei der Verwendung von has_one in Ihrer Lösung.
Ich will einfach nur kopieren und einfügen der Antwort durch den Benutzer KandadaBoggu in dieser thread.
Den
build
Signatur der Methode ist fürhas_one
undhas_many
Verbände.Den build-syntax für
has_many
Verein:Den build-syntax für
has_one
Verein:Lesen Sie die
has_one
Verein Dokumentation für mehr details.InformationsquelleAutor der Antwort 8bithero