Ich habe ein Modell Sensor mit has_many
und accepts_nested_attributes_for
Beziehungen zu einem anderen Modell Watch. In einem Formular einen Sensor zu aktualisieren, ich habe so etwas wie die folgendenRails fields_for Parameter für eine has_many Beziehung ergibt kein Array in params
<%= sensor_form.fields_for :watches do |watches_form| %>
<%= watches_form.label :label %><br />
<%= watches_form.text_field :label %>
<% end %>
Diese indended ist editting der bereits geschaffenen Uhren zu ermöglichen, mit einem Sensor gehören.
Dieser Aufruf spuckt Formulareingaben wie so:
<input name="sensor[watches_attributes][0][label]" ... />
<input name="sensor[watches_attributes][0][id]" ... />
Wenn diese abgegeben werden, das params
Objekt in dem Sensor-Controller erhält eine Assoc wie
"sensor" => {
"id"=>"1",
"watches_attributes"=> {
"0"=>{"id" => "1", "label" => "foo"},
"1"=>{"id" => "2", "label" => "bar"}
}
}
Für ein has_many
, accepts_nested_attributes_for
Updates zur Arbeit Nach dem Aufruf @sensor.update_attributes
scheint es, dass dieser Attributschlüssel wirklich einem Array zugeordnet werden muss.
Von dem, was ich in den Beispielen gesehen habe, die Kombination von has_many
, accepts_nested_attributes_for
und sensor_form.fields_for
soll mich erlauben, das resultierende params
Objekt direkt an @sensor.update_attributes
zu passieren und jedes zugehöriges Objekt zu aktualisieren, wie beabsichtigt. Stattdessen findet der Sensor ohne Fehler statt, aber die Watch-Objekte werden nicht aktualisiert (seit "watches_attributes"
Maps auf einen Hash statt auf ein Array?) Habe ich etwas verpasst?
Grundsätzlich 'accepts_nested_attributes_for' Magie ist und tut all das, auch die Umwandlung der [' Hash' in einen nutzbaren 'Array hinzufügen müssen '] (https://github.com/rails/rails/blob/8510a0bb5a8a65e4bc067ee5a7d98aae965b47a5/activerecord/lib/active_record/nested_attributes.rb#L382) für Sie. Davon abgesehen weiß ich nicht, warum Ihre "Watch" -Objekte nicht richtig gespeichert werden. – Azolo
Ok. Dann liegt das wahrscheinlich daran, dass etwas an den Attributen selbst nicht stimmt. Vielen Dank. – user1289061