提交 993e8c55 编写于 作者: A Akira Matsuda

No "t." for the migration DSL!

Now you can omit |t| block parameter and all the t. from your migration code, that means, the syntax looks more Rails-3-ish, like the routes DSL and ActionMailer DSL.
Also, this change won't break any of your existing migration files, since the traditional syntax is still available.
上级 e4ebded5
......@@ -154,11 +154,11 @@ def column_exists?(table_name, column_name, type = nil, options = {})
# )
#
# See also TableDefinition#column for details on how to create columns.
def create_table(table_name, options = {})
def create_table(table_name, options = {}, &blk)
td = table_definition
td.primary_key(options[:primary_key] || Base.get_primary_key(table_name.to_s.singularize)) unless options[:id] == false
yield td if block_given?
td.instance_eval(&blk) if blk
if options[:force] && table_exists?(table_name)
drop_table(table_name, options)
......
......@@ -394,27 +394,29 @@ def move_table(from, to, options = {}, &block) #:nodoc:
drop_table(from)
end
def copy_table(from, to, options = {}) #:nodoc:
options = options.merge(:id => (!columns(from).detect{|c| c.name == 'id'}.nil? && 'id' == primary_key(from).to_s))
def copy_table(from, to, options = {}, &block) #:nodoc:
from_columns, from_primary_key = columns(from), primary_key(from)
options = options.merge(:id => (!from_columns.detect {|c| c.name == 'id'}.nil? && 'id' == primary_key(from).to_s))
table_definition = nil
create_table(to, options) do |definition|
@definition = definition
columns(from).each do |column|
table_definition = definition
from_columns.each do |column|
column_name = options[:rename] ?
(options[:rename][column.name] ||
options[:rename][column.name.to_sym] ||
column.name) : column.name
@definition.column(column_name, column.type,
table_definition.column(column_name, column.type,
:limit => column.limit, :default => column.default,
:null => column.null)
end
@definition.primary_key(primary_key(from)) if primary_key(from)
yield @definition if block_given?
table_definition.primary_key from_primary_key if from_primary_key
table_definition.instance_eval(&block) if block
end
copy_table_indexes(from, to, options[:rename] || {})
copy_table_contents(from, to,
@definition.columns.map {|column| column.name},
table_definition.columns.map {|column| column.name},
options[:rename] || {})
end
......
......@@ -64,12 +64,13 @@ def drop_table!
end
def create_table!
id_col_name, data_col_name = session_id_column, data_column_name
connection_pool.clear_table_cache!(table_name)
connection.create_table(table_name) do |t|
t.string session_id_column, :limit => 255
t.text data_column_name
t.string id_col_name, :limit => 255
t.text data_col_name
end
connection.add_index table_name, session_id_column, :unique => true
connection.add_index table_name, id_col_name, :unique => true
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册