运用ActiveRecord

01.创建新实例
#01.1
a=Article.new
a.new_record? # =>true
#01.2代码块
a=Artile.new do |art|
art.title = "世界杯"
art.state_id = 3
end
#01.3创建并保存(会保存数据库中)
a=Artilre.create(:title=>"世界杯报道团",:state_id=>1)
-------------------------
02.读取ActiveRecord对象
Article.find(1) #读取id为1的对象
Article.find(1,2) #读取id为1和2的对象
Article.find(:all) #读取全部对象
Article.find(:first) #读取第一条
Article.find(:last) #读取最后一条
Product.first(:readonly=>true) #只读查询
Article.find(:all,:conditions=>["title like ?","%#{a}%"])
Article.find(:all,:conditions=>["title like :title",:title=>"%#{a}%"])
Article.find(:all,:conditions=>["title like :title and price>:price",:title=>"%#{a}%",:prcie=>3])
-------------------------
03.把条件设置数组
>> conditions = []  #定义一个数组
=> []
>> conditions << ["title like ?", 'a']  #把一个条件加到数组
=> [["title like ?", "a"]]
>> conditions << ["title like ?", 'a']  if params[:title].present? #加一个判断 非空时加入到数组
-------------------------
04.include附加查询(减少N+1次查询)
LineItem.all :conditions => "products.title => 'a'", :include => :product
-------------------------
05.jions附加查询
LineItem.all :conditions => "products.title like '%a%'", :joins => :product
-------------------------
06.获取字段统计信息
Product.average(:price) #平均
Product.maximum(:price) #最大
Product.minimum(:price) #最小
Product.sum(:price) #球和
Product.count() #数量
-------------------------
07.重新载入
record.reload(:lock=>true)
-------------------------
08.动态查询
Article.find_by_id(1) #查询ID=1的内容
Article.find_all_by_channel_id(1).collect(&:state_id)  #找到Article对象,channel_id是1的所有对象,然后取所有对象的state字段,组成数组.
Article.find_all_by_channel_id(1).map(&:state_id)  #同上 array.map {|item| item.state_id } → an_array
Article.find_all_by_channel_id_and_id("1","1") #查询频道=1 并且 ID=1的内容
Article.find_by_sql("select * from article") #直接运行sql
Article.find_by_title_and_price("测试",78.9) #只查第一条first 结果:title和price
Article.find_all_by_title_and_price("测试",78.9) #返回数组 结果:title和price
Article.find_or_create_by_title("hahahaha") #查询并保存
Article.find_or_initialize_by_title("aoiokkok") #查询,如果没有初始化
-------------------------
09.查询缓存
-------------------------
10.查看日志
tail -f log/development.log
-------------------------
11.表关系
LineItem(model)
belongs_to:product
-------------------------
l = LineItem.first
l.product #相当 SELECT * FROM "products" WHERE ("products"."id" = 1)
l.product(ture) #重新读取数据库,默认false读取内存
-------------------------
12.通过关系进行赋值
p=Product.last
l.product = p
l
-------------------------
13.多表操作(同时保存2个表数据)
l.num="15"  #LineItem的数据
l.build_product(:title=>"a",:price=>"3") #product的数据
l.save
-------------------------
14.只一个表储存,不需要svae
l.create_product(:title=>"a",:price=>"3")
-------------------------
15.杂项
order(model)
has_many:line_items
order(model)
has_one:其他

dependent=>:destroy #订单删除同时删除订单项,可以调用before_destroy之类的,会删除孙子表
dependent=>:delete  #订单删除同时删除订单项,但不调用before_destroy之类的 (has_many是:delete_all)
dependent=>:nullify #订单删除,不删除删除订单项,但把订单项目里到ID为空:

o=Order.first
o.line_items << LineItem.new #新加入项目 到 订单项目里 单条 直接保存.save

>> o=Order.first
=> #<....>
>> o.line_items << LineItem.new(:product_id=>"2",:quantity=>"12",:total_price=>"1368")
=> [#<.....>]
>> o.save
=> true

o.line_items.push(LineItem.new) #多条

o.line_items.replace(LineItem.find(1),LineItem.find(2)...) #把多条内容替换当前单里到所有

o.line_items.delete(LineItem.all) #删除关系多条   destroy delete_all destroy_all

o.line_items.clear #清除两表关系

o.line_items.find(line_item1,...) #查找..

o.line_items.count(line_item1,...) #计数
>> l = o.line_items.count
=> 3

>> o.line_items.empty? #是否为空
=> false

自引用(例如无限级部门)
class Department << ActiveRecord::Base
belongs_to :parent,:class_name=>"Department"   #可省略部分,:foreign_key=>"parent_id"
has_many :children,:class_name=>"Department",:foreign_key=>"parent_id"

department.children 列出下一级
department.parent 列出上一级

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值