2011-02-22 8 views
0

私のRailsアプリケーションで日時フィールドに問題があります。私は、有効な日時を受け入れる必要があり、検証を持ち、nullまたはブランク値(コードは私のquestion昨日からである)ことができます:いくつかの文字列にdatetime_field設定すると文字列を保存するときに日時フィールドにゼロ値が保存される

include ActiveModel::Validations 
    class DateValidator < ActiveModel::EachValidator 
    def validate_each(record,attribute,value) 
     record.errors[attribute] << "must be a valid datetime" unless ((DateTime.parse(value) rescue nil)) 
    end 
    end 
    validates :datetime_field :date => true, :allow_nil => true, :allow_blank => true 

しかし、私のモデルはdatetime_fieldの前の値を上書きし、レールコンソールで、私は、次の取得(ゼロに設定します:私の日時フィールドを設定することを停止する方法

object.update_attributes("datetime_field" => "Now") 
true 
object.datetime_field.nil? 
true 

nilの文字列を更新すると同時に、このフィールドを明示的空白にできること保つ後

か?

答えて

2

を返すべきと想定されています検証は奇妙です:datetime_fieldは日付である必要があり、同時にそれはnilにすることができまたは空白です。しかし、空白や空白は日付にすることはできません。 datetime_field should be DATE or BLANK or NIL:だからあなたの検証では、のように聞こえるはずです

include ActiveModel::Validations 
class DateOrBlankValidator < ActiveModel::EachValidator 
    def validate_each(record,attribute,value) 
    record.errors[attribute] << "must be a valid datetime or blank" unless value.blank? or ((DateTime.parse(value) rescue nil)) 
    end 
end 
validates :datetime_field :date_or_blank => true 

UPD

だけの通知のために。 nil.blank? => true。したがって、blank?かどうかを確認する場合は、nilの場合は何かを検証する必要はありません。 Blank?は、空のオブジェクトおよび無しオブジェクトに対して真を返します。"".blank? => truenil.blank? => true

0

あなたですか? r datetime_fieldは移行のdatetimeとしてマークされていますか?

あなたが渡した文字列が有効なdatetime文字列ではないため、datetime_fieldがnilに設定されている場合。代わりにこれをやってみてください。

object.update_attributes("datetime_field" => "2010-01-01") 
true 

は、その後

object.datetime_field 

2010-01-01 
関連する問題