レールは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. はC#で検証結果のシリーズのN深さ構造を構築
- 6. レール環境で構築されたAPIのテスト
- 7. レールでダイナミックモデルを構築するにはどうすればいいですか?
- 8. エラスティックビーンストークはアンチウイルスで構築されていますか?
- 9. GDAL/OGRは現在geosで構築されていますか?
- 10. DATETIME InnoDBトランザクションのNOW()は保証されていますか?
- 11. 私はレール検証の問題に直面しています
- 12. Insert、Delete、Updateコマンドはアダプタで構築されていません
- 13. Eclipse WebプロジェクトはANTで構築されていませんか?
- 14. DateTimeを一度に構築する
- 15. チームカバレッジはコードカバレッジに基づいて構築されます
- 16. サインアップページはどのように構築されていますか?
- 17. レールの検証エラー
- 18. ライブラリーの例がEclipseで構築されています
- 19. VS 2010のデータベースプロジェクトは、sys.syscolumnsでスクリプトを構築/検証できません。
- 20. レール上に構築されたローカルpostgresqlデータベースをherokuにプッシュするには?
- 21. `[例外]のDateTime :: __構築物():`それは、システムのタイムゾーンの設定
- 22. JMeterの負荷テストでレールの検証が無視される
- 23. レール検証のカスタムエラーメッセージは無視されます/表示されません。なぜですか?
- 24. org.apache.axis.client.Callで構築されており、ドミノ
- 25. イオンプロジェクトは構築されません
- 26. ビジネスロジックでDateTimeを検証する
- 27. レールの検証で数式を検証する
- 28. Flutter - フレーミングワークがすでに構築されているために構築できません。
- 29. レールは、コレクションが動作しないか検証されている改革柵のオブジェクトを形成します
- 30. Django Formsets - フォームセットを正しく構築して検証するには?
私は 'validates_timeliness'を愛する:私はこのような何かをやっています。それは宝石としてインストールすることができます。選択された回答をコピー&ペーストするほど速くインストールされました。 –