diff options
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb | 73 |
1 files changed, 69 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb index 64a7e9fabe..6aae556d67 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -104,6 +104,67 @@ module ActiveRecord execute create_sql end + # A block for changing columns in +table+. + # + # === Example + # # change_table() yields a Table instance + # change_table(:suppliers) do |t| + # t.column :name, :string, :limit => 60 + # # Other column alterations here + # end + # + # ===== Examples + # ====== Add a column + # change_table(:suppliers) do |t| + # t.column :name, :string, :limit => 60 + # end + # + # ====== Add 2 integer columns + # change_table(:suppliers) do |t| + # t.integer :width, :height, :null => false, :default => 0 + # end + # + # ====== Add created_at/updated_at columns + # change_table(:suppliers) do |t| + # t.timestamps + # end + # + # ====== Add a foreign key column + # change_table(:suppliers) do |t| + # t.references :company + # end + # + # Creates a <tt>company_id(integer)</tt> column + # + # ====== Add a polymorphic foreign key column + # change_table(:suppliers) do |t| + # t.belongs_to :company, :polymorphic => true + # end + # + # Creates <tt>company_type(varchar)</tt> and <tt>company_id(integer)</tt> columns + # + # ====== Remove a column + # change_table(:suppliers) do |t| + # t.remove :company + # end + # + # ====== Remove a column + # change_table(:suppliers) do |t| + # t.remove :company_id + # t.remove :width, :height + # end + # + # ====== Remove an index + # change_table(:suppliers) do |t| + # t.remove_index :company_id + # end + # + # See also Table for details on + # all of the various column transformation + def change_table(table_name) + yield Table.new(table_name, self) + end + # Renames a table. # ===== Example # rename_table('octopuses', 'octopi') @@ -124,13 +185,17 @@ module ActiveRecord execute(add_column_sql) end - # Removes the column from the table definition. + # Removes the column(s) from the table definition. # ===== Examples # remove_column(:suppliers, :qualification) - def remove_column(table_name, column_name) - execute "ALTER TABLE #{quote_table_name(table_name)} DROP #{quote_column_name(column_name)}" + # remove_columns(:suppliers, :qualification, :experience) + def remove_column(table_name, *column_names) + column_names.flatten.each do |column_name| + execute "ALTER TABLE #{quote_table_name(table_name)} DROP #{quote_column_name(column_name)}" + end end - + alias :remove_columns :remove_column + # Changes the column's definition according to the new options. # See TableDefinition#column for details of the options you can use. # ===== Examples |