Ich verwende Rails, um automatisch untergeordnete Objekte basierend auf einem komplexen Satz verschachtelter Attribute zu erstellen. Daher müssen die Parameter auf sehr spezielle Weise verschachtelt werden. Natürlich erkenne ich, dass ich sie mit JS konstruieren kann, aber ich möchte, dass die Reihenfolge des Formulars automatisch bei der Konstruktion hilft. Für den Kontext habe ich 2 Spalten, vertreten durch 2 <td>
s. Jede Spalte kann entweder einen neuen Datensatz erstellen oder einen vorhandenen Datensatz bearbeiten. Wenn ein vorhandener Datensatz geändert werden soll, muss natürlich die ID des Datensatzes übergeben werden.Welche Regeln beachtet HTML beim Erstellen von Parametern?
Das gerenderte HTML ist wie folgt:
<td width="50%" style="padding-right:3%" class="logistic-details" data-type="logistics" data-typelogistics="delivery" data-instructions="test instructions" data-id="1" data-amount="20">
<span class="area-to-inject-amount-inputs" data-object="type_logistics" data-type="logistics" data-typelogistics="delivery">
<input class="labeler-response" name="type_logistics_attributes[][id]" type="hidden" value="1">
<input class="labeler-response" name="type_logistics_attributes[][instructions]" type="text" value="test instructions">
</span>
</td>
<td width="50%" style="padding-right:3%" class="logistic-details" data-type="logistics" data-typelogistics="pickup" data-instructions="" data-id="" data-amount="0">
<span class="area-to-inject-amount-inputs" data-object="type_logistics" data-type="logistics" data-typelogistics="pickup" data-actioned="charged">
<input type="hidden" name="type_logistics_attributes[][type_of_logistics]" value="pickup">
<input class="injected-amount-input" type="number" min="0" max="" placeholder="Amount" name="type_logistics_attributes[][charged_amounts_attributes][][amount]" value="20">
<span class="area-to-inject-type-of-amount">
<input type="hidden" name="type_logistics_attributes[][charged_amounts_attributes][][type_of_amount]" value="logistics">
</span>
<input class="labeler-response" name="type_logistics_attributes[][instructions]" type="text" placeholder="Enter address and instructions">
</span>
</td>
In diesem Fall ist die erste <td>
einen vorhandenen Datensatz mit ID 1 wird modifiziert, während die zweite <td>
die Parameter die Bereitstellung eines neuen Datensatzes zu schaffen. Wenn ein neuer Datensatz erstellt wird, wird auch das Kind charged_amounts
erstellt. So, das sind die Parameter würde ich erwarten:
"type_logistics_attributes"=>[
{"id"=>"1", "instructions"=>"test instructions"},
{"type_of_logistics"=>"pickup", "charged_amounts_attributes"=>[{"amount"=>"40", "type_of_amount"=>"logistics"}], "instructions" => "123 Fake street"}
]
Stattdessen ich die unten bekommen:
"type_logistics_attributes"=>[
{"id"=>"1", "type_of_logistics"=>"pickup", "instructions"=>"test instructions", "charged_amounts_attributes"=>[{"amount"=>"40", "type_of_amount"=>"logistics"}]},
{"instructions"=>"123 Fake street"}
]
Irgendwie die <td>
Grenze nicht funktioniert und das Kind charged_amount
Attribute haben irgendwie in einen Topf geworfen worden in die erste <td>
bestehende Datensatzänderung.
Danke!
Können Sie auch Ihren RoR-Code posten, den Sie verwenden, um dieses Markup zu generieren? – Vucko
Können Sie uns die _raw POST-Daten übermitteln, die von Ihrem Browser gesendet wurden? Der einfachste Weg, um dies zu bekommen, wird aus dem Netzwerkbereich der Browser-Entwickler-Tools sein. – zwol