ChatGPT解决这个技术问题 Extra ChatGPT

Rails 4: List of available datatypes

Where can I find a list of data types that can be used in Ruby on Rails 4? Such as

text

string

integer

float

date

I keep learning about new ones and I'd love to have a list I could easily refer to.

@MarkThomas: Not a duplicate. My question here is specifically for Rails 4.
The accepted answer in that question is essentially the same as your accepted answer. Both point to the Rails 4 docs. Also, it's a moot point because ActiveRecord datatypes didn't change from Rails 3 to Rails 4.
I for one did not know AR datatypes didn't change between rails 3 and 4 so I'm thankful this question/answer is here.

J
Josien

Here are all the Rails 4 (ActiveRecord migration) datatypes:

:binary

:boolean

:date

:datetime

:decimal

:float

:integer

:bigint

:primary_key

:references

:string

:text

:time

:timestamp

Source: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column
These are the same as with Rails 3.

If you use PostgreSQL, you can also take advantage of these:

:hstore

:json

:jsonb

:array

:cidr_address

:ip_address

:mac_address

They are stored as strings if you run your app with a not-PostgreSQL database.

More PostgreSQL data types

Rails 4

Rails 5

Rails 6

Rails 7


I believe these are the datatypes that are supported across all databases. However as Peter de Ridder mentions there are some datatypes like hstore which are still supported.
Question: postgres documentation doesn't seem to have text data type. Yet, rails can still handle it? What goes on in the background?
PostgreSQL does have a text datatype. Under the hood all varchar/text fields are variable length arrays. postgresql.org/docs/9.3/interactive/datatype-character.html
I'd like to add that if you're using a non-postgres database and your application schema_format is not set to use :sql, then your schema.rb file wont be able to dump the table that uses types like :json. The schema will still be dumped for the tables that use default types but you'll see a comment for the table with special types like, "could not dump table...". Look here to set the schema_format.
Also, those columns will have type nil in a non-postgres database. You can inspect the type in the console with Model.columns_hash["column_name"].type. These are just things that I've run into when using :json column type, I may be wrong and this may not happen to everyone but I thought I'd let future readers know in case they have troubles. Regardless, +1 for this answer because it really helped me.
C
Community

You might also find it useful to know generally what these data types are used for:

:string - is for small data types such as a title. (Should you choose string or text?)

:text - is for longer pieces of textual data, such as a paragraph of information

:binary - is for storing data such as images, audio, or movies.

:boolean - is for storing true or false values.

:date - store only the date

:datetime - store the date and time into a column.

:time - is for time only

:timestamp - for storing date and time into a column.(What's the difference between datetime and timestamp?)

:decimal - is for decimals (example of how to use decimals).

:float - is for decimals. (What's the difference between decimal and float?)

:integer - is for whole numbers.

:primary_key - unique key that can uniquely identify each row in a table

There's also references used to create associations. But, I'm not sure this is an actual data type.

New Rails 4 datatypes available in PostgreSQL:

:hstore - storing key/value pairs within a single value (learn more about this new data type)

:array - an arrangement of numbers or strings in a particular row (learn more about it and see examples)

:cidr_address - used for IPv4 or IPv6 host addresses

:inet_address - used for IPv4 or IPv6 host addresses, same as cidr_address but it also accepts values with nonzero bits to the right of the netmask

:mac_address - used for MAC host addresses

Learn more about the address datatypes here and here.

Also, here's the official guide on migrations: http://edgeguides.rubyonrails.org/migrations.html


Applause. +1 for thoroughness, and anticipation of usage. That's UX mentality right there.
Absolutely terrific answer - many thanks for this. The links to the articles on differences literally took the questions right out of my mouth.
For Postgres there is additionally a uuid type which can be used as normal field like t.uuid :name... or as primary key like create_table :users, id: :uuid do... or e.g. t.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
Additional PostgreSQL types supported by Rails listed in the API docs for ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods. Highlights include money, json, xml, daterange
Yes, uuid was added for Postgres, but it is not returned with an Active Record create(). Has that issue been fixed with Rails 5?
g
gotqn

It is important to know not only the types but the mapping of these types to the database types, too:

https://i.stack.imgur.com/Q0j0x.png

https://i.stack.imgur.com/tuRiZ.png

Source added - Agile Web Development with Rails 4


I would be interested to see the json type in this table, if you feel up to it
You can always check the NATIVE_DATABASE_TYPES for the adapter you need - github.com/rails/rails/blob/master/activerecord/lib/…
Is there a spot on the guides or a single source of truth for these things over time?
t
tomascharad

You can access this list everytime you want (even if you don't have Internet access) through:

rails generate model -h

at 'Available field types:' section
P
Peter de Ridder

Rails4 has some added datatypes for Postgres.

For example, railscast #400 names two of them:

Rails 4 has support for native datatypes in Postgres and we’ll show two of these here, although a lot more are supported: array and hstore. We can store arrays in a string-type column and specify the type for hstore.

Besides, you can also use cidr, inet and macaddr. For more information:

https://blog.engineyard.com/2013/new-in-rails-4