• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > rails常用数据库查询操作、方法浅析

rails常用数据库查询操作、方法浅析

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了rails,ruby on rails,rails是什么意思,ruby on rails教程,railsinstaller等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1、获取数据

获取第一条、最后一条记录
Model.first
Model.first(options)
Model.find(:first, options)
Model.last
Model.last(options)
Model.find(:last, options)</div>

通过id获取记录

Model.find(1, 10, options)
Model.find([1, 10], options)
.find all</div>

Model.all(options)</div>

对一组数据进行相同操作

User.all.each do |user|
    NewsLetter.weekly_deliver(user)
end</div>
如果表记录数比较大,这种方式比较耗资源,因为它会一次载入整个表的数据。改用以下这种方式,它每次只载入1000行,然后逐步yield完整个表

User.find_each do |user|
    NewsLetter.weekly_deliver(user)
end</div>
自定义方式,find_each接受和find同样的options

User.find_each(:batch_size => 5000, :start => 2000) do |user|
    NewsLetter.weekly_deliver(user)
end</div>
find_in_batches,和find_each相似,但它yield时传递的是model对象数组,而不是单个model对象

Invoice.find_in_batches(:include => :invoice_lines) do |invoices|
    export.add_invoices(invoices)
end</div>

2、查询条件

通过替换?来传递条件值,可避免SQL注入

Client.first(:conditions => ["orders_count = ?", params[:orders])</div>
symbol占位条件

Client.all(:conditions => ["created_at >= :start_date AND created_at <= :end_date", {:start_date => params[:start_date], :end_date => params[:end_date] }])</div>
范围条件 in(集合)

Client.all(:conditions => ["created_at IN (?)", (params[:start_date].to_date)..(params[:end_date].to_date])</div>
生成sql

SELECT * FROM users WHERE (created_at IN ('2007-12-31','2008-01-01','2008-01-02','2008-01-03','2008-01-04','2008-01-05', '2008-01-06','2008-01-07','2008-01-08'))</div>
如果要生成日期时间,再加上.to_time

有上数据库会在以上条件中报错,如Mysql会报查询语句过长的错误,此时可以改成created_at > ? AND created_at < ?的形式

Hash条件

Client.all(:conditions => {:locked => true })</div>
带范围条件

Client.all(:conditons => {:created => (Time.now.midnight - 1.day)..Time.now.midnight})</div>
生成sql

SELECT * FROM clients WHERE (clients.created_at BETWEEN '2008-12-21 00:00:00' AND '2008-12-22 00:00:00')</div>
集合条件

Client.all(:conditons => {:orders_count => [1,3,5])</div>
生成sql

SELECT * FROM clients WHERE (clients.orders_count IN (1,3,5))</div>

3、查询选项

排序

#单个排序
Client.all(:order => "created_at ASC")
#多个排序
Client.all(:order => "orders_count ASC, created_at DESC")</div>
返回指定字段

Client.all(:select => "viewable_by, locked")
#使用函数
Client.all(:select => "DISTINCT(name)")</div>
限定和偏移Limit and Offset

Client.all(:limit => 5)
#生成
SELECT * FROM clients LIMIT 5
Client.all(:li

您可能想查找下面的文章:

  • Rails bundle命令安装mysql gem包出错的解决方法
  • win7安装ruby on rails开发环境
  • 简单对比分析Ruby on Rails 和 Laravel
  • 在 Ubuntu 12.04 Server 上安装部署 Ruby on Rails 应用
  • 快速正确的安装 Ruby, Rails 运行环境
  • Windows下Ruby on Rails开发环境安装配置图文教程
  • Ruby On Rails中如何避免N+1问题
  • 艰难完成 nginx + puma 部署 rails 4的详细记录
  • 学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)
  • 浅谈Rails 4 中Strong Parameters机制

相关文章

  • 浅谈Ruby on Rails的国际化
  • rudy 重载方法 详解
  • Ruby中使用多线程队列(Queue)实现下载博客文章保存到本地文件
  • Ubuntu系统安装Ruby语言的三种方法
  • 举例初步讲解Ruby中的正则表达式
  • 分析 rudy 类
  • Ruby on Rails框架程序连接MongoDB的教程
  • 快速正确的安装 Ruby, Rails 运行环境
  • Ruby的基础语法入门学习教程
  • Ruby使用设计模式中的代理模式与装饰模式的代码实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Ruby on Rails下的图像处理入门教程
    • Ruby和元编程之万物皆为对象
    • Ruby中任务构建工具rake的入门学习教程
    • Ruby中百分号和字面值的使用示例
    • ruby 小脚本搞定CVS服务器更换后checkout下来的工程迁移
    • 设计模式中的观察者模式在Ruby编程中的运用实例解析
    • 举例讲解Ruby中require的使用方法
    • Ruby中case表达式详解
    • Ruby中操作文件的方法介绍
    • CentOS 7下配置Ruby语言开发环境的方法教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有