RoR - More Active Record

Active Record Scope:

default_scope:   默认的检索方式

#Use unscoped to break out of the default 

class Hobby < ActiveRecord::Base
has_and_belongs_to_many :people default_scope { order :name }
end Hobby.pluck :name
# => ["Music","Programming"] Hobby.unscoped.pluck :name
# => ["Programming", "Music"] #named scopes
#scope :name, lambda scope :ordered_by_age, -> {order age: :desc}
scope :starts_with, -> (starting_string) {where("first_name LIKE ?", "#{starting_string}%")} Person.ordered_by_age.pluck :age
# => [,,,,] Person.ordered_by_age.starts_with("Jo").pluck :age, :first_name
# => [[,"Josh"],[,"John"],[,"John"]] Person.ordered_by_age.limit().starts_with("Jo").pluck :age, :first_name
# => [[,"Josh"],[,"John"]]

Scope 总是返回ActiveRecord::Relation

Validations:

数据总是要经过Validations才能存在数据库之中

#:presence and :uniqueness

presence: true
# Make sure the field contains some data uniqueness: true
# 确保只有一个data class Job < ActiveRecord::Base
belongs_to :person
has_one :salary_range validates :title, :company, presence: true
end #Other Common Validators :umericality
# validates numeric input :length
# validates value is a certain length :format
# validates value complies with some regular expression format :inclusion
# validates value is inside specified range :exclusion
# validates value is out of the specified range

Writing your own validation:

class SalaryRange < ActiveRecord::Base
belongs_to :job validate :min_is_less_than_max def min_is_less_than_max
if min_salary > max_salary
errors.add(:min_salary, "cannot be greater than maximum salary!")
end
end
end

N+1 Queries Issue and DB Transactions:

RoR - More Active Record

#solve for n+ queries 

Person.includes(:personal_info).all.each { |p| puts p.personal_info.weight }
上一篇:PHP设计模式笔记四:适配器模式 -- Rango韩老师 http://www.imooc.com/learn/236


下一篇:面试题目-atof与ftoa