0

ただし、更新のみのレールでREST APIを作成しています。私がやりたいことは、タイムスタンプを渡して、結果でレコードを更新できるようにすることです。

私は単に利用しています

@my_class = MyClass.find(params[:id])

@my_class.update_attributes!(params)

これは期待どおりに機能しますが、値が渡されたときに、'2013-07-08 20:00'日付の形式のみが必要なため、悪いリクエストをスローしたいとします'yyyy-mm-dd hh:mm:ss'

現在のデフォルトの動作は、フィールドを静かに null に設定することです。代わりにこれを取得してエラーをスローするのに最適なものは何ですか? 私は試してみましたvalidate_format_ofが、null に設定されるため、渡される値ではなく null を検証するだけです。

明らかに、パラメーターを確認することはできますが、もっとエレガントなものを望んでいました。

4

2 に答える 2

0

Time#parse正規表現の一致よりも優れたソリューションだと思います。これは、文字列が正常に解析されたときに Time オブジェクトを返します。

>> Time.parse("'2013-07-08 20:00'")
=> 2013-07-08 20:00:00 -0400

文字列を解析できない場合、エラーが発生します。

>> Time.parse("meow")
ArgumentError: no time information in "meow"

特定のフィールドが必須ではないため、これは仕様を正確に満たしていません。たとえば、これによりエラーは発生しません。

>> Time.parse('2013-07-08')
=> 2013-07-08 00:00:00 -0400

時間を解析し、出力をフォーマットすることで、要件を満たす必要があります。hh:mm:ss が指定されていない場合、これは正しく false と評価されます。

>> str = '2013-07-08'
=> "2013-07-08"
>> Time.parse(str).to_formatted_s(:db) == str
=> false

hh:mm:ss が提供されると、true と評価されます。

>> str = '2013-07-08 20:00:45'
=> "2013-07-08 20:00:45"
>> Time.parse(str).to_formatted_s(:db) == str
=> true
于 2013-07-25T00:19:34.970 に答える