2016-11-25 4 views
0

Einreichen der folgenden ParameterSchienen-Controller Aufruf params verschachtelter Attribute

Parameters: {[...] "physicalinventario"=>{[...] "physicalinventarioitems_attributes"=>{"0"=>{"quantity"=>",85"}}}, "commit" 

Das Ziel ist es, die Menge Parameter am physicalinventarioitem Controller create Aktion abzufangen und Desinfizieren es möglich Komma als Dezimalwert eingegeben wird

if params[:physicalinventario][:physicalinventarioitems_attributes][:quantity].include? "," 
    params[:physicalinventarioitem][:quantity] = params[:physicalinventario][:physicalinventarioitems_attributes][:quantity].tr!(',', '.').to_d 
end 

Die Syntax ist jedoch falsch, da kein Wert nach dem Komma verarbeitet wird.

Antwort

1

@Alex Antwort ist in Ordnung, wenn Sie nur eine Menge haben.

aber was, wenn Sie mehrere quantites haben,

zB: {"0"=>{"quantity"=>",85"},"1"=>{"quantity"=>",90"}}

So, hier ist die Antwort, die diese Anforderung erreicht auch verschachtelte Attribute für mehrere.

hash = {"physicalinventario"=>{"physicalinventarioitems_attributes"=>{"0"=>{"quantity"=>",85"},"1"=>{"quantity"=>",90"}}}} 

Der Code, den Sie benötigen,

hash["physicalinventario"]["physicalinventarioitems_attributes"].each do |key, value| 
    if value["quantity"].include? "," 
    value["quantity"] = value["quantity"].tr!(',', '.').to_f 
    end 
end 

Hier ist die resultierende Hash,

`{"physicalinventario"=>{"physicalinventarioitems_attributes"=>{"0"=>{"quantity"=>0.85}, "1"=>{"quantity"=>0.9}}}}` 
+0

@Jerome, überprüfen Sie bitte diese Antwort für mehrere verschachtelte Attribute. – Sravan

+0

zwei Beobachtungen. Der erste besteht darin, dass der Code in die Erstellungsaktion des Schachtelungsdatensatzes eingefügt werden soll. Zweitens führt dies, wie erwähnt, zu einer "impliziten Umwandlung von String in Integer" -Fehler. 'params [: physicalinventario] [: physicalinventarioitems_attributes] .alles do | key, Wert |' wird korrekt verarbeitet. – Jerome

+0

Ich habe dort 'to_f' verwendet. – Sravan

0

Sieht aus, als hättest du ["0"] in der Kette verpasst, um zu bekommen: Menge.

Sollte

params[:physicalinventario][:physicalinventarioitems_attribu‌tes]["0"][:quantity] 

Bequemste Rails Weg zu sanieren (normalisieren) Daten in einem Modell. Um keine Duplikate zu erstellen, hier mehr How best to sanitize fields in ruby on rails

+0

die Sequenzkennung in der Kette verpasst wird, ich stimme. Die Eingabe erfolgt jedoch für mehrere verschachtelte Attribute. daher kann die Ziffer nicht aufgerufen werden, ohne falsch zu sein für die nachfolgenden physikalischenEinträge, die eingereicht werden ... – Jerome

Verwandte Themen