ROR学习笔记06.12.24-26

阅读更多

=========
06.12.24
=========
多字段组合查询只有 _and_ 这样一种形式;不能在字段名之间用 _or_ 分隔。

除了 save() 方法之外,还可以用 update_attribute() 和 update() 方法来更新某几个特定字段的值

=========
06.12.26
=========
一对一关联:has_one:单数 ; belongs_to:单数
一对多关联:has_many:复数 ; belongs_to:单数
多对多关联:has_and_belongs_to_many:复数 ; has_and_belongs_to_many:复数
-------------------------------------------
belongs_to :父类
           :class_name => "" #"Order"
           :foreign_key => "" #"order_id"
           :conditions => "" #"paid_on is not null"
           :dependent => "" #字表中纪录不能独立于父表中的纪录而存在
           :order => "" #判断如何对多条纪录排序
has_one :the same as belongs_to
--------------------------------------------
乐观锁:
1.在表中建立 lock_version 字段,默认为 0 ,乐观锁就建立了;
2.禁用乐观锁:ActiveRecord::Base.lock_optimistically = false
---------------------------------------------
计数器:计数器缓存 counter caching
1.在子模型对象的 belongs_to 声明中加上 :counter_cache 选项
2.在父表的定义中加上 "字表名称加上 _count 后缀" 字段,初始值必须为 0
----------------------------------------------
MYSQL使用InnoDB存储引擎才支持事务

事务:
begin
    modelname.transaction(模型对象) do
      ...
    end
rescue
    ...
end
-----------------------------------------
ActiveRecord补充

Acts As List:
acts_as_list :scope => :parent_id #指定该列表是针对每个父对象单独建立的
move_highter();move_lower();move_to_bottom();move_to_top()  #这些方法定位
higher_item();lower_item() #前一个,后一个
first?() ; last?()  #是否位于列表的前端或尾端

Acts As Tree
acts_as_tree :order => "name"    #:order表示:在查找某个特定节点的子节点时,按照子节点的name字段排序
--------------------
字符串处理:
数组.compact.join(" ")    #将数组中的字符串以" "连接
String.split(/,/)         #将一个字符串分割为子字符串,然后将结果作为字符串数组返回
-----------------------------
Aggregation聚合
用于保存复合数据的类(譬如这里的Name类)必须符合两个条件:
1.必须有一个构造函数initialize(),其参数必须对应于它所映射的数据库字段;
2.必须为所映射的每个字段提供一个可读的属性  #attr_reader
class Name
  attr_reader :first,:initials,:last
  def initialize (first,initials,last)
    @first = first
    @initials = initials
    @last = last
  end
  def to_s            #以字符串的形式输出客户全名
    [ @first, @initials, @last ].compact.join(" ")
  end
end

class Customer < ActiveRecord::Base
  composed_of :name,               #把数据库字段映射到Name对象上
              :class_name => Name
              :mapping =>
                [
                  [ :first_name, :first ] ,
                  [ :initials, :initials ],
                  [ :last_name, :last ]
                ]
end
------------------------------------
单表继承
继承体系中的类被映射到同一张表中!
父表中:1.type字段用来保存当前纪录对应的对象属于什么类型——按照ActiveRecord的约定;
        2.除非一个字段是所有子类都拥有的,否则就必须让它允许null值

你可能感兴趣的:(ActiveRecord,MySQL,IDEA,Cache)