mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Use attribute pairs instead of the migration name to create add and remove column migrations. Closes #9166 [lifofifo]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7422 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
80ff0b9f1c
commit
fa602bb86d
4 changed files with 39 additions and 20 deletions
|
@ -1,5 +1,15 @@
|
|||
*SVN*
|
||||
|
||||
* Use attribute pairs instead of the migration name to create add and remove column migrations. Closes #9166 [lifofifo]
|
||||
|
||||
For example:
|
||||
|
||||
ruby script/generation migration AddSomeStuffToCustomers first_name:string last_name:string
|
||||
|
||||
or
|
||||
|
||||
ruby script/generation migration RemoveSomeStuffFromCustomers first_name:string last_name:string
|
||||
|
||||
* Add ActiveResource to Rails::Info. Closes #8741 [kampers]
|
||||
|
||||
* use Gem.find_name instead of search when freezing gems. Prevent false positives for other gems with rails in the name. Closes #8729 [wselman]
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Description:
|
||||
Stubs out a new database migration. Pass the migration name, either
|
||||
CamelCased or under_scored, as an argument. A migration class is generated
|
||||
in db/migrate prefixed by the latest migration number.
|
||||
CamelCased or under_scored, and an optional list of attribute pairs as arguments.
|
||||
|
||||
A migration class is generated in db/migrate prefixed by the latest migration number.
|
||||
|
||||
You can name your migration in either of these formats to generate add/remove
|
||||
column lines: AddColumnToTable or RemoveColumnFromTable
|
||||
column lines from supplied attributes: AddColumnsToTable or RemoveColumnsFromTable
|
||||
|
||||
Example:
|
||||
`./script/generate migration AddSslFlag`
|
||||
|
@ -12,13 +13,17 @@ Example:
|
|||
With 4 existing migrations, this creates the AddSslFlag migration in
|
||||
db/migrate/005_add_ssl_flag.rb
|
||||
|
||||
`./script/generate migration AddSslFlagToAccount`
|
||||
`./script/generate migration AddTitleBodyToPost title:string body:text published:boolean`
|
||||
|
||||
This will create the AddSslFlagToAccount in db/migrate/005_add_ssl_flag_to_account.rb with
|
||||
This will create the AddTitleBodyToPost in db/migrate/005_add_title_body_to_post.rb with
|
||||
this in the Up migration:
|
||||
|
||||
add_column :accounts, :ssl_flag, :type, :null => :no?, :default => :maybe?
|
||||
add_column :posts, :title, :string
|
||||
add_column :posts, :body, :text
|
||||
add_column :posts, :published, :boolean
|
||||
|
||||
And this in the Down migration:
|
||||
|
||||
remove_column :accounts, :ssl_flag
|
||||
remove_column :posts, :published
|
||||
remove_column :posts, :body
|
||||
remove_column :posts, :title
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
class MigrationGenerator < Rails::Generator::NamedBase
|
||||
class MigrationGenerator < Rails::Generator::NamedBase
|
||||
def manifest
|
||||
record do |m|
|
||||
m.migration_template 'migration.rb', 'db/migrate'
|
||||
m.migration_template 'migration.rb', 'db/migrate', :assigns => get_local_assigns
|
||||
end
|
||||
end
|
||||
|
||||
def auto_migration direction
|
||||
case class_name.underscore
|
||||
when /^(add|remove)_(.*)_(?:to|from)_(.*)/ then
|
||||
action, col, tbl = $1, $2, $3.pluralize
|
||||
|
||||
unless (action == "add") ^ (direction == :up) then
|
||||
%(\n add_column :#{tbl}, :#{col}, :type, :null => :no?, :default => :maybe?)
|
||||
|
||||
private
|
||||
|
||||
def get_local_assigns
|
||||
returning(assigns = {}) do
|
||||
if class_name.underscore =~ /^(add|remove)_.*_(?:to|from)_(.*)/
|
||||
assigns[:migration_action] = $1
|
||||
assigns[:table_name] = $2.pluralize
|
||||
else
|
||||
%(\n remove_column :#{tbl}, :#{col})
|
||||
assigns[:attributes] = []
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
class <%= class_name.underscore.camelize %> < ActiveRecord::Migration
|
||||
def self.up<%= auto_migration :up %>
|
||||
def self.up<% attributes.each do |attribute| %>
|
||||
<%= migration_action %>_column :<%= table_name %>, :<%= attribute.name %><% if migration_action == 'add' %>, :<%= attribute.type %><% end -%>
|
||||
<% end %>
|
||||
end
|
||||
|
||||
def self.down<%= auto_migration :down %>
|
||||
def self.down<% attributes.reverse.each do |attribute| %>
|
||||
<%= migration_action == 'add' ? 'remove' : 'add' %>_column :<%= table_name %>, :<%= attribute.name %><% if migration_action == 'remove' %>, :<%= attribute.type %><% end -%>
|
||||
<% end %>
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue