Rails 操作数据库 方法总结
2012-06-18 09:16
447 查看
a = Category.new(:name => 'Ruby', :position => 1)
a.save
# save 还有相同方法”save!”
# 有无惊叹号的差别在于validate资料验证不正确的动作,
# 无惊叹号版本会回传布林值(true或false),有惊叹号版本则是验证错误会丢出例外。
b = Category.create(:name => 'Perl', :position => 2)
# create也有“create!”方法,作用同save
# create在执行的时候已经将资料插入数据库,无须再调用save方法
b.save(:validate => false)
# 透过:valiate => false 可以略过验证
# create虽然无需再调用save方法,但仍然可以调用save方法。
Category.first
# 取出第一条记录
Category.last
# 取出最后一条记录
Category.all
# 取出所有
Category.find(1)
# 取出id=1的记录
Category.find(1, 3)
Category.find([1, 3])
# 取出id为1和3的记录
# find方法会在没有取到符合条件的记录时抛出错误
# 如果你不想这样,请用:find_by_id
Category.find_by_name('Ruby')
# 取出name字段等于“Ruby”的记录
# 可以用and进行多字段查询
Category.find_by_name_and_postion('Ruby', 1)
# 取出name='ruby' and postion=1的记录
# find_by_* 和 find_all_by_*它们的不同之处是前者会进行“limit 1”限制
Category.find_by_sql("SELECT * FROM categories WHERE name LIKE '%p%'")
# 如果你想自己手写sql就可以使用这个方法
# find_by_sql没有“find_all_by_sql”方法
Category.where(:name => 'Ruby', :position => 1)
# `name` = 'Ruby' AND `position` = 1
Category.where(["name = ? or position = ?", 'Ruby', 3])
# `name` = 'Ruby' OR `position` = 3
# 另外,where 是lazy loading,也就是直到真的需要取值的时候,才会跟资料库拿资料。
# 如果需要立即触发,可以接着使用.all, .first, .last,例如:
# Category.where(["name = ? or position = ?", 'Ruby', 3]).all
Category.limit(5).all
# 限制查询记录数,它只接受这一个参数
# 如果要使用形如:“limit x, y"请组合使用“offset”方法
Category.order("position")
Category.order("position DESC")
Category.order("position DESC, name ASC")
# 对内容排序
Category.order("position").reorder("name")
# 改用name 排序
Category.order("position").reorder(nil)
# 取消所有排序
Category.limit(3).offset(2)
# 从第二条开始显示3条记录
Category.select('id, name')
# 只查询出id,name栏位的数据
Category.readonly.first
# 使用readonly可以使查询出来的结果不能再次改变其值
# 以上查询方法可以进行无顺序的自由的串接:
# Category.select(..).order(..).limit(.)....
Category.where("position > 1").find_each do |category|
category.do_some_thing
end
# 如果资料量很大,但是又需要全部拿出来处理,可以使用find_each 批次处理
Category.find_each(:batch_size => 2) do |category|
puts category.id
end
# 预设会批次查出1000条,如果需要设定可以加上:batch_size 参数。
c = Category.all
c.reload
# reload 重新查询出结果给c
c = Category.first
c.destory
# 删除id = c.id的资料
Category.delete(2)
# 删除id = 2的资料
Category.count
# 获取记录总数
Category.average(:position)
Category.maximum(:position)
Category.sum(:position)
# 略过...
Category.where(["position>?", 2]).count
# 用where缩小范围
c = Category.first
c.update_attributes(:position => 6)
# or
# 注意下边这个,我照书上抄的,老是报错,好像不行,试着传hast,array,symbol都不行
# 版本 3.1.0,有知道用法的朋友告知我:sss60@qq.com
c.update_attributes('position', 6)
# 更新id = c.id的记录使栏柆position=6
# 同类方法:“update_attributes!”
a.save
# save 还有相同方法”save!”
# 有无惊叹号的差别在于validate资料验证不正确的动作,
# 无惊叹号版本会回传布林值(true或false),有惊叹号版本则是验证错误会丢出例外。
b = Category.create(:name => 'Perl', :position => 2)
# create也有“create!”方法,作用同save
# create在执行的时候已经将资料插入数据库,无须再调用save方法
b.save(:validate => false)
# 透过:valiate => false 可以略过验证
# create虽然无需再调用save方法,但仍然可以调用save方法。
Category.first
# 取出第一条记录
Category.last
# 取出最后一条记录
Category.all
# 取出所有
Category.find(1)
# 取出id=1的记录
Category.find(1, 3)
Category.find([1, 3])
# 取出id为1和3的记录
# find方法会在没有取到符合条件的记录时抛出错误
# 如果你不想这样,请用:find_by_id
Category.find_by_name('Ruby')
# 取出name字段等于“Ruby”的记录
# 可以用and进行多字段查询
Category.find_by_name_and_postion('Ruby', 1)
# 取出name='ruby' and postion=1的记录
# find_by_* 和 find_all_by_*它们的不同之处是前者会进行“limit 1”限制
Category.find_by_sql("SELECT * FROM categories WHERE name LIKE '%p%'")
# 如果你想自己手写sql就可以使用这个方法
# find_by_sql没有“find_all_by_sql”方法
Category.where(:name => 'Ruby', :position => 1)
# `name` = 'Ruby' AND `position` = 1
Category.where(["name = ? or position = ?", 'Ruby', 3])
# `name` = 'Ruby' OR `position` = 3
# 另外,where 是lazy loading,也就是直到真的需要取值的时候,才会跟资料库拿资料。
# 如果需要立即触发,可以接着使用.all, .first, .last,例如:
# Category.where(["name = ? or position = ?", 'Ruby', 3]).all
Category.limit(5).all
# 限制查询记录数,它只接受这一个参数
# 如果要使用形如:“limit x, y"请组合使用“offset”方法
Category.order("position")
Category.order("position DESC")
Category.order("position DESC, name ASC")
# 对内容排序
Category.order("position").reorder("name")
# 改用name 排序
Category.order("position").reorder(nil)
# 取消所有排序
Category.limit(3).offset(2)
# 从第二条开始显示3条记录
Category.select('id, name')
# 只查询出id,name栏位的数据
Category.readonly.first
# 使用readonly可以使查询出来的结果不能再次改变其值
# 以上查询方法可以进行无顺序的自由的串接:
# Category.select(..).order(..).limit(.)....
Category.where("position > 1").find_each do |category|
category.do_some_thing
end
# 如果资料量很大,但是又需要全部拿出来处理,可以使用find_each 批次处理
Category.find_each(:batch_size => 2) do |category|
puts category.id
end
# 预设会批次查出1000条,如果需要设定可以加上:batch_size 参数。
c = Category.all
c.reload
# reload 重新查询出结果给c
c = Category.first
c.destory
# 删除id = c.id的资料
Category.delete(2)
# 删除id = 2的资料
Category.count
# 获取记录总数
Category.average(:position)
Category.maximum(:position)
Category.sum(:position)
# 略过...
Category.where(["position>?", 2]).count
# 用where缩小范围
c = Category.first
c.update_attributes(:position => 6)
# or
# 注意下边这个,我照书上抄的,老是报错,好像不行,试着传hast,array,symbol都不行
# 版本 3.1.0,有知道用法的朋友告知我:sss60@qq.com
c.update_attributes('position', 6)
# 更新id = c.id的记录使栏柆position=6
# 同类方法:“update_attributes!”
相关文章推荐
- servlet小总结3----同一用户的不同页面的共享数据的四种方法,及Servlet中操作数据库时等
- rails常用数据库查询操作、方法浅析
- 自己总结一些操作数据库的方法
- C#操作本地文件及保存文件到数据库的基本方法总结
- POI操作Excel常用方法总结
- oracle与sql server2000中不在同一个服务器上的数据库数据操作的方法对比
- DB2 数据库循环使用方法总结[转]
- ArcEngine GDB数据库查询方法总结
- QSQLITE 数据库操作总结
- 【转载】HBase性能优化方法总结(3):写表操作
- javascript数组操作总结和属性、方法介绍
- MySQL 数据库 简单操作命令 (部分总结)
- 数据库操作 查询,更新,删除的方法(AR模式)
- 数据库表操作总结
- 对数据库的操作总结
- 关于Activiti中taskService的addUserIdentityLink方法的数据库操作
- JDBC数据库的使用操作总结
- Android 数据库SQLite的操作总结
- C++操作SQLITE获得查询结果集的几种方法总结
- POI操作Excel常用方法总结(转)