method
column
v1.2.6 -
Show latest stable
-
0 notes -
Class: ActiveRecord::ConnectionAdapters::TableDefinition
- 1.0.0 (0)
- 1.1.6 (0)
- 1.2.6 (27)
- 2.0.3 (27)
- 2.1.0 (0)
- 2.2.1 (6)
- 2.3.8 (0)
- 3.0.0 (0)
- 3.0.9 (-3)
- 3.1.0 (0)
- 3.2.1 (0)
- 3.2.8 (0)
- 3.2.13 (0)
- 4.0.2 (3)
- 4.1.8 (0)
- 4.2.1 (-4)
- 4.2.7 (0)
- 4.2.9 (0)
- 5.0.0.1 (-38)
- 5.1.7 (0)
- 5.2.3 (0)
- 6.0.0
- 6.1.3.1
- 6.1.7.7
- 7.0.0
- 7.1.3.2
- 7.1.3.4
- What's this?
column(name, type, options = {})
public
Instantiates a new column for the table. The type parameter must be one of the following values: :primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean.
Available options are (none of these exists by default):
- :limit: Requests a maximum column length (:string, :text, :binary or :integer columns only)
- :default: The column’s default value. Use nil for NULL.
- :null: Allows or disallows NULL values in the column. This option could have been named :null_allowed.
- :precision: Specifies the precision for a :decimal column.
- :scale: Specifies the scale for a :decimal column.
Please be aware of different RDBMS implementations behavior with :decimal columns:
- The SQL standard says the default scale should be 0, :scale <= :precision, and makes no comments about the requirements of :precision.
- MySQL: :precision [1..63], :scale [0..30]. Default is (10,0).
- PostgreSQL: :precision [1..infinity], :scale [0..infinity]. No default.
- SQLite2: Any :precision and :scale may be used. Internal storage as strings. No default.
- SQLite3: No restrictions on :precision and :scale, but the maximum supported :precision is 16. No default.
- Oracle: :precision [1..38], :scale [-84..127]. Default is (38,0).
- DB2: :precision [1..63], :scale [0..62]. Default unknown.
- Firebird: :precision [1..18], :scale [0..18]. Default (9,0). Internal types NUMERIC and DECIMAL have different storage rules, decimal being better.
- FrontBase?: :precision [1..38], :scale [0..38]. Default (38,0). WARNING Max :precision/:scale for NUMERIC is 19, and DECIMAL is 38.
- SqlServer?: :precision [1..38], :scale [0..38]. Default (38,0).
- Sybase: :precision [1..38], :scale [0..38]. Default (38,0).
- OpenBase?: Documentation unclear. Claims storage in double.
This method returns self.
Examples
# Assuming td is an instance of TableDefinition td.column(:granted, :boolean) #=> granted BOOLEAN td.column(:picture, :binary, :limit => 2.megabytes) #=> picture BLOB(2097152) td.column(:sales_stage, :string, :limit => 20, :default => 'new', :null => false) #=> sales_stage VARCHAR(20) DEFAULT 'new' NOT NULL def.column(:bill_gates_money, :decimal, :precision => 15, :scale => 2) #=> bill_gates_money DECIMAL(15,2) def.column(:sensor_reading, :decimal, :precision => 30, :scale => 20) #=> sensor_reading DECIMAL(30,20) # While <tt>:scale</tt> defaults to zero on most databases, it # probably wouldn't hurt to include it. def.column(:huge_integer, :decimal, :precision => 30) #=> huge_integer DECIMAL(30)