レールはdatetimeの検証を行いますか?私はプラグインを見つけた http://github.com/adzap/validates_timeliness/tree/master、 しかし、それは箱から来るべきである何かのように思える。レールはdatetime検証で構築されています
答えて
ありますノー日時のActiveRecordのバリデータを内蔵していますが、簡単にこのようなもので、プラグインを使用せずに、ActiveRecordのモデルに機能のこの種を追加することができます。
class Thing < ActiveRecord::Base
validate :happened_at_is_valid_datetime
def happened_at_is_valid_datetime
errors.add(:happened_at, 'must be a valid datetime') if ((DateTime.parse(happened_at) rescue ArgumentError) == ArgumentError)
end
end
パーフェクト、感謝ギャベ。 – Daniel
これは助けてうれしいです。最も輝かしいコードではありませんが、機能します。 –
ありがとう、これは素晴らしいです。 'validates_timeliness'を試みましたが、getterとsetterを使用する際に問題がありました。これは完全に機能しました。 –
それは検証するために非常に必要です日付。デフォルトのRailsフォームヘルパーでは、9月31日のような日付を選択できます。 、私はちょうど日が実際には、日付、およびでない文字列であることを検証するために探していた
class MyModel < ActiveRecord::Base
validate :mydate_is_date?
private
def mydate_is_date?
if !mydate.is_a?(Date)
errors.add(:mydate, 'must be a valid date')
end
end
end
:
は、フォームを介してユーザー入力を検証することは良いスタートですが、質問の文脈営業担当者がRailsのモデル検証を求めていたことを示唆しています。 –
ゲイブの答えはので、ここで私は、日付を検証するためにやったことだ、私のために動作しませんでした文字、int型、float型、等...
より複雑な日付の検証がここで見つけることができます:https://github.com/codegram/date_validator
宝石は最も簡単な解決策です、私は実装するために3分かかった。コードを記述する価値はありません。 –
@MichaelSchmitz - コードを書いてみる価値はある - コードを見ている新しい人は、その宝石の存在を知らないかもしれないし、単純なタスクであるために余計なオーバーヘッドを加える。 – Toby
@Toby - ポインタありがとう、あなたはそれについて正しいです。私は今のところ唯一の開発者です。 –
私は宝石date_validator
をお勧めします。 https://rubygems.org/gems/date_validatorを参照してください。それはよく維持され、そのAPIはシンプルでコンパクトです。
あなたは内部のappディレクトリ
2でバリと呼ばれるフォルダを作成して)自分で
1をカスタム日時バリデータを作成することができます)ファイルdatetime_validator.rbを作成します。アプリ内の以下の内容で/ディレクトリ
class DatetimeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
if ((DateTime.parse(value) rescue ArgumentError) == ArgumentError)
record.errors[attribute] << (options[:message] || "must be a valid datetime")
end
end
end
3をバリデータ)モデル
class YourModel < ActiveRecord::Base
validates :happend_at, datetime: true
end
4にこの検証を適用します)application.rb
config.autoload_paths += %W["#{config.root}/app/validators/"]
5)再起動中に以下の行を追加します。あなたのレールアプリケーション
注意:上記の方法は、レール4
最近のバージョンのRailsは、検証前にtype castの値になるため、無効な値はカスタムバリデーターにnil
として渡されます。
# app/validators/date_time_validator.rb
class DateTimeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
if record.public_send("#{attribute}_before_type_cast").present? && value.blank?
record.errors.add(attribute, :invalid)
end
end
end
# app/models/something.rb
class Something < ActiveRecord::Base
validates :sold_at, date_time: true
end
# spec/models/something_spec.rb (using factory_girl and RSpec)
describe Something do
subject { build(:something) }
it 'should validate that :sold_at is datetimey' do
is_expected.not_to allow_value(0, '0', 'lorem').for(:sold_at).with_message(:invalid)
is_expected.to allow_value(Time.current.iso8601).for(:sold_at)
end
end
- 1. タグシステムの構築と検証
- 2. LINQ、datetimeを構築できません
- 3. オブジェクトは構築されていますが、まだヌルです
- 4. は検証:レール3
- 5. DATETIME InnoDBトランザクションのNOW()は保証されていますか?
- 6. レール環境で構築されたAPIのテスト
- 7. レールでダイナミックモデルを構築するにはどうすればいいですか?
- 8. Eclipse WebプロジェクトはANTで構築されていませんか?
- 9. Insert、Delete、Updateコマンドはアダプタで構築されていません
- 10. DateTimeを一度に構築する
- 11. ライブラリーの例がEclipseで構築されています
- 12. VS 2010のデータベースプロジェクトは、sys.syscolumnsでスクリプトを構築/検証できません。
- 13. `[例外]のDateTime :: __構築物():`それは、システムのタイムゾーンの設定
- 14. ビジネスロジックでDateTimeを検証する
- 15. レール検証のカスタムエラーメッセージは無視されます/表示されません。なぜですか?
- 16. Django Formsets - フォームセットを正しく構築して検証するには?
- 17. iOS - リンクされているアーキテクチャではないアーカイブ用にファイルが構築されています(i386)
- 18. XPathDocumentは構築後に構築されるメモリストリームを使用しますか?
- 19. レールの検証で数式を検証する
- 20. 私はPythonで構築された単純なゲームロビーを探しています
- 21. のVisual Studioプロジェクト構築されていない、私はMSBuildの
- 22. Javascriptのオブジェクトはいつ構築されますか?
- 23. authlogic_facebook_connectはレール2.3.8を実行しているユーザーの検証
- 24. レールの静的モデル検証
- 25. レールによるフォーム検証
- 26. レール・データベース設計の検証
- 27. javascript関数がjquery-ajaxのレール検証エラーで表示されない
- 28. コード契約では、ループの検証が保証されていません
- 29. N個のレコードのシリアル化されたオブジェクトを構築するレール
- 30. Jarsigner: "このjarには、証明書チェーンが検証されていないエントリが含まれています。
私は 'validates_timeliness'を愛する:私はこのような何かをやっています。それは宝石としてインストールすることができます。選択された回答をコピー&ペーストするほど速くインストールされました。 –