1. ホーム
  2. ruby-on-rails

[解決済み] Railsのカラムタイプに関するドキュメントはありますか?

2022-04-17 17:02:37

質問

シンプルなタイプのリスト以外のものを探しています。 このページにある :

<ブロッククオート

primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean, :primary_key。

しかし、実際にそのようなドキュメントがあるのでしょうか? を定義しています。 これらのフィールドは?

具体的には

  • との違いは何ですか? :string:text ?
  • :float:decimal ?
  • の特徴は何ですか? :time , :timestamp および :datetime ?

これらのタイプのニュアンスは、どこかに文書化されているのでしょうか?

EDIT DBプラットフォームの実装のポイントは、私が質問しようとしていることとは無関係です。 もし、例えば :datetime がRailsのドキュメントで意図する意味が定義されていない場合、db-adapter-writersは何を基準に対応するカラムタイプを選択するのでしょうか?

どのように解決するのか?

個人の経験から構築されたガイドライン。

  • 文字列 :
  • 255文字まで(DBMSによって異なる)
  • 短いテキストフィールド(名前、電子メールなど)に使用します。
  • テキスト :
  • 長さ無制限(DBMSに依存)
  • コメントやブログの投稿などに使用します。一般的な経験則:textareaで取り込まれる場合はTextを使用する。テキストフィールドを使った入力には、Stringを使う。
  • 整数 :
  • 整数
  • フロート :
  • 浮動小数点精度で格納された10進数
  • 精度が固定されているため、計算によっては問題が発生する場合があります。
  • 10進数 :
  • 10進数は、計算で必要とされる精度に応じて変化して保存されます。
  • 参照 これ の記事で、浮動小数点と小数の違いの例と詳細な解説を紹介しています。
  • ブーリアン :
  • 真/偽の属性を格納するために使用する(すなわち、オン/オフのような2つの状態のみを持つもの)。
  • バイナリ :
  • というデータの塊で、画像、動画、その他のファイルをそのままの生の形式で保存するために使用します。 ブロブ
  • :primary_key
  • このデータ型はプレースホルダーで、Railsはあなたの選んだデータベースが必要とする主キーのデータ型に変換します (例. serial primary key の場合、postgreSQL)。この使い方はやや複雑なので、お勧めしません。
  • モデル制約と移行制約を使用する(例えば validates_uniqueness_ofadd_index と共に :unique => true オプション) の代わりに、独自のフィールドで主キー機能をシミュレートすることができます。
  • 日付 :
  • 日付(年、月、日)のみを格納する。
  • 時間 :
  • 時間(時、分、秒)のみを格納する
  • 日付時間 :
  • 日付と時刻の両方を格納する
  • タイムスタンプ
  • 日付と時刻の両方を格納する
  • 注: Railsでは、TimestampとDateTimeはどちらも同じ意味です(日付と時刻の両方を保存するにはどちらかの型を使用します)。なぜ両方が存在するのかというTL;DRの説明については、一番下の段落を読んでください。

これらの型はよく混乱するものです。なぜ、これらに関する公式のドキュメントがないのか、本当にわかりません。また、あなたが言及したデータベースアダプタは、Railsを書いた人たちが書いたものなので、おそらくアダプタを書くときに参考になるようなドキュメントは必要なかったのだと想像します。これがお役に立てれば幸いです。

注意: 両方の :DateTime:Timestamp は、私が調べたところでは、主にデータベースシステムとの互換性のためにRailsに含まれているようです。たとえば、MySQLの TIMESTAMP のデータ型は unix タイムスタンプとして保存されます。その有効範囲は 1970 年から 2038 年までで、時刻は最後の エポック これは標準とされているが、実際にはシステムによって異なることがある。MySQL は後に DATETIME データ型は、秒単位で保存されます (5.6.4 以降はオプションで小数点以下の秒も可能)。 サイズアップ . その TIMESTAMP のデータ型は後方互換性のために残された。他のデータベースシステムも同様の進化を遂げた。Railsは複数の標準が存在することを認識し、その両方へのインターフェイスを提供しました。しかし、Rails ActiveRecordのデフォルトでは、どちらのデータ型も :Timestamp:DateTime に格納されている UTC 日付を、MySql の DATETIME そのため、Railsプログラマにとって機能的な違いはありません。これらは 希望 を区別することができます。(より詳細な説明は これ SOの回答)。