2011-01-04 2 views
2

Ich habe ein Rails3-Projekt, mit Mongodb + MongoMapper. Ich habe ein Modell mit einem Gleitkommawert, den der Benutzer über ein Formular einstellen kann. Wenn das Formular übergeben wird, wenn kein Wert für foo_val angegeben wird, wird der Parameter als leere Zeichenfolge übergeben, wodurch der Attributwert auf 0.0 gesetzt wird. Dies ist nicht das, was ich möchte. Ich möchte zwischen einem vom Benutzer übermittelten Wert von "0" und dem vom Benutzer übermittelten "Null" -Wert ("") unterscheiden, d. H. Das Attribut löschen.MongoMapper - Float aktualisiert via form: wie man "" = "nil" (anstatt 0.0) abbildet?

Wie kann ich das erreichen?

class Foo 
    include MongoMapper::Document 

    key :foo_val, Float 

end 

Antwort

2

Ich denke, dass Ihre Antwort funktioniert - Sie könnten es in die before_save Aktion des Dokuments verschieben. Eine andere Sache, die Sie versuchen könnten, ist validates_numerical_of: foo_val,: allow_nil => true

Das könnte funktionieren, angeblich gießt leere Strings auf Null.

1

Ok, hier ist, was ich herausgefunden habe. Es könnte auch ein besserer Weg, dies zu tun:

Ich habe ein, bevor die Filter in dem Foo-Controller, eine Funktion, Haken, dass mein Schwimmer params überprüft, bevor erstellen, zu aktualisieren, zu bearbeiten und speichern, wie so:

class FooController < ApplicationController 

    before_filter :nilify_float_params, :only => [:new, :create, :update, :edit] 
    ... 
protected 
    def nilify_float_params 
    if params[:foo] 
     params[:foo][:foo_value] = nil if params[:foo][:foo_value].empty? 
    end 
    end  
end 
Verwandte Themen