Rails モデルで期間フィールドを使用する最適な方法を探しています。形式は HH:MM:SS (例: 01:30:23) にしたいと思います。使用しているデータベースは、ローカルでは sqlite、本番環境では Postgres です。
また、このフィールドを使用して、フィールド内のすべてのオブジェクトを確認し、そのモデル内のすべてのオブジェクトの合計時間を算出して、次のような結果を得たいと思います。
合計45時間25分34秒の30件の記録。
では、何が一番効果的でしょうか?
- 移行のフィールドタイプ
- CRUD フォームのフォーム フィールド (時間、分、秒のドロップダウン?)
- モデル内のすべてのレコードの合計期間を生成する最も安価な方法
ベストアンサー1
- データベースに整数として保存します (おそらく秒数)。
- 入力フォームは、具体的な使用例によって異なります。ドロップダウンは面倒なので、時間 + 分 + 秒で期間を入力する小さなテキスト フィールドを使用する方が適切です。
- 期間列に対してクエリを実行するだけで
SUM
、総計を生成できます。整数を使用すると、これは簡単かつ高速です。
さらに:
- ヘルパーを使用して、ビューに期間を表示します。
ActiveSupport::Duration
を使用すると、期間を秒単位の整数に簡単に変換できます123.seconds
(123
データベースの整数に置き換えます)。inspect
結果に を使用するとDuration
、適切な書式になります。 (完璧ではありません。自分で何か記述する必要があるかもしれません。) - モデルでは、
ActiveSupport::Duration
整数ではなくオブジェクトを返す/受け取る属性リーダーとライターが必要になるでしょう。 と を定義するだけduration=(new_duration)
でduration
、内部的に整数引数でread_attribute
/ を呼び出すことができます。write_attribute