2012-03-23 12 views
0

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?

+1

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

+0

Ok. Dann liegt das wahrscheinlich daran, dass etwas an den Attributen selbst nicht stimmt. Vielen Dank. – user1289061

Antwort

0

Von Schienen 3 auch

attr_accessible :watches_attributes 

zu Ihrem Sensor-Klasse

Verwandte Themen