rails3 高级查询


在modle中

class Student < ActiveRecord::Base
  attr_accessible :address, :age, :name, :sex

  scope :address_is_beijing, where(:address => "beijing")

  def self.younger_than(age)
    where("students.age < ?", age)
  end

  scope :myage, younger_than(21)

end
 
 
打开控制台,切换到工作目录后,执行rails c

scope :address_is_beijing, where(:address => "beijing")

这句相当于给Student增加了类方法address_is_beijing, 执行Student.address_is_beijing, 查看输出结果

irb(main):001:0> Student.address_is_beijing
  [1m[36mStudent Load (0.0ms)[0m  [1mSELECT "students".* FROM "students" WHE
RE "students"."address" = 'beijing'[0m
=> [#<Student id: 1, name: "zhangsan", age: 21, address: "beijing", sex: "man",
created_at: "2012-09-02 04:44:43", updated_at: "2012-09-02 08:23:19">, #<Student
 id: 9, name: "zhaoliu", age: 24, address: "beijing", sex: "man", created_at: "2
012-09-02 08:21:13", updated_at: "2012-09-02 08:21:13">]
 
查看sql语句: Student.address_is_beijing.to_sql

irb(main):002:0> Student.address_is_beijing.to_sql
=> "SELECT \"students\".* FROM \"students\"  WHERE \"students\".\"address\" = 'b
eijing'"
 
同样,执行Student.myage 可以查询到年龄小于21的学生

你可能感兴趣的:(sql,query)