搞了几天rails了,太magic了。所以搞不清楚,只知道调用。
今天深入去了解了下 create_table 大家给指点指点
先请看流程:
再看 SchemaStatement 类的create_table()代码
ruby 代码
-
-
-
-
-
-
-
-
-
-
-
-
- def create_table(table_name, options = {})
- table_definition = TableDefinition.new(self)
- table_definition.primary_key(options[:primary_key] || "id") unless options[:id] == false
-
- yield table_definition
-
- if options[:force]
- drop_table(table_name, options) rescue nil
- end
-
- create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
- create_sql << "#{quote_table_name(table_name)} ("
- create_sql << table_definition.to_sql
- create_sql << ") #{options[:options]}"
- execute create_sql
- end
大家明白了吧。
根据传递的参数,一步一步来创建 create_sql, 然后execute来执行。
字段的组合是用
yield table_definition
具体可以去跟踪 TableDefinition 类(schema_definitions.rb 文件里面, path: gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters\abstract )
通过这个跟踪,知道了很多东西,不错。
现在也了解选项:force是什么意思。
也了解了 some_method *args do |something|
end
这种书写方法的意思。 do .... end就是 some_method 里面的yield
分享到:
- 2007-12-21 11:17
- 浏览 1611
- 评论(2)
- 论坛回复 / 浏览 (2 / 3157)
- 查看更多
评论
可以写成:
的原因是应为下面的这个代码块:
代码是在:
schema_definitions.rb
%RUBY_HOME%\gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters\abstract