2010-09-03 8 views
5

Prawdopodobnie jest to proste pytanie, ale zauważyłem kilka błędów wynikających z konieczności pustych wartości zamiast Nils ...szyny Nils w formie

Jeśli użytkownik pozostawia puste pole w standardowej szyny aplikacji jest tam sposób na pozostawienie pola w bazie danych jest ustawiony na wartość NULL zamiast wprowadzania pustej wartości?

Zasadniczo czek taki jak @ model.info.nil? zwraca true, zamiast sprawdzać, czy jest on zarówno zerowy, jak i pusty?

Odpowiedz

4

używam var.blank ?, bo mam te wyniki w konsoli Rails 3 uruchomiony przed Ruby 1.8:

>> nil.blank? 
=> true 
>> [].blank? 
=> true 
>> nil.empty? 
NoMethodError: You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.empty? 
     from (irb):4 

Historycznie rzecz biorąc, nie widziałem .empty? pracować dla zerowych obiektów.

+0

Dzięki za wskazanie, że na zewnątrz powinno być puste? w rzeczy samej. –

1

edit Jak brokenbeatnik zauważyć, że mylić blank? z empty?, mój zły.

Nie trzeba sprawdzać wartości zarówno jak i pustych wartości. var.empty? zwróci true nawet dla zer (zobacz dokumentację API). Dlatego zazwyczaj wygodniej jest używać tylko pustego czeku.

Ale jeśli tego nie chcesz, możesz przekonwertować puste wartości na nils, używając active record callbacks. Coś jak attribute = nil if attribute.empty? za każdym razem, zanim obiekt zostanie zapisany.

Powiązane problemy