读《应用rails进行敏捷web开发》第2版-9

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才会正确更新

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值