Rails モデルで期間フィールドを使用する 質問する

Rails モデルで期間フィールドを使用する 質問する

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

おすすめ記事