您的位置:首页 > 编程语言 > Ruby

ruby on rails 的数据库查询方法

2013-03-12 18:03 561 查看
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!”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: