name="jindi"
name.chars.length 其中的chars方法能把string类型变为正确识别unicode的chars类型
完整的应用要保证数据的整条路径都是统一的支持unicode的才行。那么。。。
使用mysql数据库时
1.数据库编码
create database 。。。。character set utf8
2.数据库连接
in database.yml
development:
encoding : utf8
3.全局的布局文件:
app/view/layouts/xxx.rhtml
<meta http-equiv="content-type" content="text/html;charset=utf-8"></meta>
数据迁移
理论不记了,很好理解
迁移文件应该用两种命令生成,一种是model 一种是migration,前者除了生成迁移文件,还生成model的代码文件,后者仅生成迁移文件
迁移文件中的各种语法
add_column :orders,:email,:string
remove_column :orders, :email
数据类型有
:string
:binary
:boolean
:date
:datetime
:decimal
:integer
:text
:timestamp
数据类型参数
:null=>true/false
:limit=>size
:default=>"2010" 勿用表达式,因其仅在执行迁移时计算一次
以下仅适用于decimal
:precision=>13
:scale=>2
rename_column :orders ,:old_field,:new_field
change_column :orders,:some_field,:string
如果迁移(up)不可逆转,那么在down方法中抛异常
raise ActiveRecord::IrreversibleMigration
rename_table
create_table :order,:options=>"xxxxx" 其中的options会添加到建表语句的后面,用于特定的数据库选项
add_index :orders ,:name
remove_index
create_table :order ,:id=>false(不创建id主键)
初始化数据的迁移任务,用夹具载入
1.创建一个dev_data 目录 mkdir db/migration/dev_data
2.在该目录下创建users.yaml文件
a:
name : xxxx
email:xxx
b:
name:b
email:xxxx
3.in migration.rb
execute "原生sql"
让建立外键的代码成为一个辅助方法
1.在lib目录下建立一个module,声明一个辅助方法方法,比如fk(xx,xx),用于迁移文件调用。
2.迁移文件
require "migration_heplers"
class somemigration< ActiveRecord::Migration
extend MigrationHelpers 将这个module中的实例方法变成类方法,供up类方法调用
db/schema.rb随时保持整个数据库结构的总览,而不用对一张表的现有情况,需要查看所有的迁移文件
annotate_models插件,一定要试试,安装后运行rake annotate_models,就会在模型文件的顶端插入现有数据库表结构的注释!!!
Order.column_names 字段列表
Order.column_hash[:name] name字段的定义
Task.find(:all,:select=>"name,email") select用来指定取那些字段
habtm 貌似,都应该变化为两个has_many :through
给关联加上方法
访问代码就可以是user.articles.rated_above(3)
单表继承!!魔术字段type ,自动填写为各个子类的类名!!,太魔术了!!!
acts_as_list 魔术字段position
在父model中定义
has_many :child,:orders=>:position
在子model中定义
acts_as_list :scope =>parent_id
acts_as_tree 魔术字段parent_id
acts_as_tree :order=>:name
指定用那个字段排序
find :include=>{:childs1,:childs2} ,杜绝2n+1
在子表 belongs_to :parent,counter_cache=>true
在父表加入字段 :children_count
使用count缓存,
注意,children_count必须初始化为0;在写代码时,必须使用父对象的集合加入子对象,该cache才会正确更新