2016-04-22 7 views
0

arbeitet So habe ich dies auf dem erb:Rails, gleiches Stück Code wird nicht mit 3.2

<%= fields_for camera, :index =>camera.id do |field|%> 
<%= field.check_box :alertflag %> 

Und das auf dem Controller:

@camera = Camera.update(params[:camera].keys, params[:camera].values) 

Und es funktioniert auf einem Server der haben Rails 3.0.9, aber aus irgendeinem Grund funktioniert es nicht auf einem Server mit Rails 3.2.

Die params-Hash ist wie folgt auf 3.0.9:

camera%5B10%5D%5Balertflag%5D=0 

On 3.2:

camera%5Balertflag%5D=0 

So ist der Index fehlt.

+0

Auf welcher Weise Funktioniert es nicht mehr? Wie sieht der übergebene Params-Hash aus? –

+0

@FrederickCheung Ich habe die Information zu der Frage hinzugefügt. Also im Grunde fehlt der Index. – IBG

Antwort

2

Die Option index wird in beiden Rails-Versionen unterstützt. Aber wenn Sie den Quellcode des FormHelper Modul in den beiden Rails-Versionen zu vergleichen wird deutlich, dass die fields_for Methodensignatur von geändert hat:

def fields_for(record_or_name_or_array, *args, &block) 

in Rails 3.0, zu

def fields_for(record_name, record_object = nil, fields_options = {}, &block) 

in Rails 3.2.

Wenn Sie also die options (zB die index) übergeben müssen, müssen Sie es als das dritte Argument die Methode jetzt passieren, so etwas wie die folgenden funktionieren soll:

<%= fields_for :camera, camera, :index => camera.id do |field| %>