ROR 之 用户注册实例(一) ...
Rails复数规则
Rails约定ControllerName(URL)为复数,TableName为复数。
从感性认识来看,Table复数规则即前节ruby script/generate scaffold user创建users表的现象。
那么ROR是怎么实现Table复数规则的?
script/generate指向%RegisterDemo%\script\generate,
在generate中require 'commands/generate'指向%rails-2.2.2%\lib\commands\generate.rb。
require "#{RAILS_ROOT}/config/environment" require 'rails_generator' require 'rails_generator/scripts/generate' ARGV.shift if ['--help', '-h'].include?(ARGV[0]) Rails::Generator::Scripts::Generate.new.run(ARGV)
第1行 require %RegisterDemo% \config\environment.rb。
第5行帮助命令格式是ruby script/generate --help/-h。在命令行中执行看回显。
第2,3行 require 指向 %rails-2.2.2%\lib\rails_generator\generators\applications和components。
这两子目录下边的每一个Folder都是Installed Generator以及Generator Template。
接下来 Installed Generator中可以看到pluralize,singularize字样的方法,测试一下:
require 'active_support' puts 'post'.pluralize →posts puts 'blog'.pluralize →blogs puts 'shoes'.singularize →shoe
这几个方法决定单复数形式,那么具体实现在哪里?
%activesupport-2.2.2%\lib\active_support\inflections.rb和inflector.rb。
%rails-2.2.2%\lib\rails_generator\base.rb
第232,233行,Check ActiveRecord::Base.pluralize_table_names ,定义了TableName。
%rails-2.2.2%\lib\rails_generator\generators\components\scaffold\scaffold_generator.rb
第24行,定义了ControllerName(URL)。
Ruby script/generate scaffold user都做了些什么?
%RegisterDemo% \db\migrate\yyyymmddhhMMss_create_users.rb建表文件(utc)。
%RegisterDemo% \app\controllers\users_controller.rb,
%RegisterDemo% \app\helpers\users_helper.rb,
%RegisterDemo% \app\models\user.rb。
%RegisterDemo% \app\views\users\index.html.erb,new.html.erb,edit.html.erb,show.html.erb对应L(D)CUR,
%RegisterDemo% \app\views\layouts\users.html.erb。
%RegisterDemo% \config\routes.rb追加map.resources :users。
暂且先列出以上这些。
再次rake db:migrate
此时将读取migrate\yyyymmddhhMMss_create_users.rb,实例CreateUsers类,
更新schema.rb,并将yyyymmddhhMMss写入schema_migrations表。
参考:%active_record%\connection_adapters\abstract\schema_statements.rb
initialize_schema_migrations_table和assume_migrated_upto_version。
Rake Task 一览: Rake -T > C:\rake.txt
接下来一步步完善RegisterDemo(CSS,Ajax,注册验证码,Mail激活等)...
※原创版权所有,转载请Mail:Nanigac.Yin#Gmail.COM。