find 解析
1:find(id_or_array_of_ids, options)
功能: find是rails用来查找数据库的数据的方法
参数
:first 第一条数据 Account.find(:first) 或 Account.first
:last 最后一条数据 Account.find(:last) 或 Account.last
:all 所有数据 Account.find(:all) 或 Account.all
:id 或 :id数组 Account.find(1) Account.find([1,2,3]),相当于 select * from accounts where id in (1,2,3),也就是说虽然查询了多条数据,但是只用了一条sql语句。
options 详解:
:order 排序 Account.find(:all,
rder => "created_at desc")
:limit 截取limit条数据 Account.find(:all, :limit => 4)
:offset 偏移,总是和limit一起使用,指定偏移几条数据 Account.find(:all, :limit => 4,
ffset => 2)
:conditions 条件 Account.find(:all, :conditions => ["id > ?", 4] 或
Account.find(:all, :conditions => ["id > :id", {:id => 4}]
:joins 相当于mysql语句中的 left join、right join、inner join Blog.find(:all, :joins => :account, :select => "blogs.*, accounts.email as accounts_email" )
:include 预加载,前提是指定的表与当前表有关联关系 Blog.find(:all, :include => :account)
*重要: :joins和:include的用法比较类似,但是二者又有一定的区别,这两个都能提高效率,让我们谈一下,他们的优点和区别吧
1>: 优点: 举个例子
accounts表和blogs表的关系是一对多
1)blogs = Blog.find(:all) # 查询一次blogs表
blogs.each {|blog| blog.account.email} # 循环多少次,就查询多少次accounts表
2)blogs = Blog.find(:all, :include => :account) #查询了blogs表和accounts表各一次
blogs.each {|blog| blog.account.email} # 不再查询,因为已经加载了accounts表
总结: :include 减少了查询表的次数,提高了访问数据库的效率,:joins和:include都可以减少查询表的次数
注意: 前面的:include预加载,也可以继续优化,也就是使用效率更高的:joins,这种方式叫做‘携带加载’,举例:blogs = Blog.find(:all, :joins => :account, :select => "blogs.*, accounts.email as accounts_email" )
2>: :joins和:include的区别
这两个都是联表查询,可以提高效率,但是:include 是预加载,也就是将关联的信息会预加载到内存,那么当我们用到预加载的内容时,使用这个会很好,如果不用到预加载的内容时,则不要用:include,而要用:joins,例如我们把关联表的某些数据用到条件里时,而不用到页面显示,这时就用:joins,具体的例子: blogs = Blog.find(:all, :include => :account, :conditions => {:accounts => {:id => 1}} )
2: find_by_sql("sql语句") 直接通过sql语句来查询数据 eg: Account.find_by_sql("select * from accounts")
3: find_by_字段 or find_by_字段1_and_字段2 通过一个或多个字段来查询某条数据
find_all_by_字段 or find_all_by_字段1_and_字段2 通过一个或多个字段来查询多条数据
举例:
Account.find_by_username_and_id("zhangcaiyan", 1)
Account.find_all_by_username_and_sex("zhangcaiyan", true)
4: find_or_initialize_by_username_and_... 通过某个或某些字段查找某条数据,如果不存在,则初始化该条数据
find_or_create_by_username_and_... 通过某个或某些字段查找某条数据,如果不存在,则创建该条数据
eg:Account.find_or_initialize_by_username("zhangcaiyan")
Account.find_or_create_by_username("zhangcaiyan")
分享到:
相关推荐
Jbuilder是一个Ruby gem,它提供了一个简洁的Domain Specific Language (DSL),让开发者能够通过一种构造式的语法来构建复杂的JSON对象,避免了手动拼接字符串的繁琐。这个DSL使得编写和维护JSON序列化代码变得更加...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而受到开发者喜爱。在QuestTrain博客中,你可以找到关于Ruby的各种文章、教程和实战案例,帮助你提升在Ruby开发中的技能和理解。...
Ruby以其简洁、面向对象的语法和强大的元编程能力而闻名,因此可以灵活地创建和操作这样的数据结构。 首先,我们可以创建一个简单的Ruby类来表示射频信息: ```ruby class RFSpec attr_accessor :frequency, :...
2. 视图模板:使用ERB(Embedded Ruby)语法,将HTML和Ruby代码结合,动态生成网页。 3. 测试框架:Rails内置了Test::Unit和RSpec,支持单元测试、集成测试和功能测试,确保代码质量。 4. 资源导向的路由:通过...
我需要解析一些MIG(Mach接口生成器)文件,以将具有可变出/出方向的函数馈入XNU的静态分析器步骤中。 这是我采取的一种骇人听闻的... 我通过运行antlr4ruby -fo generated/ Mig.g在generated/生成了词法分析器/解析器
Ruby 以其简洁、易读的语法和面向对象特性而受到开发者喜爱。 **文件名称列表解析:** "blog-rails-main" 可能是项目的主目录或者分支名,这在 Git 版本控制系统中很常见。这意味着项目源代码、配置文件、数据库...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。它非常适合用于快速开发,尤其是对于构建数据驱动的应用程序,如这个宝可梦信息库。 在“Pokemon-Info”项目中,文件名...
MiniScript在语法上类似于Ruby。 前端和表达式解析技术是使用及其出色的书籍作为参考的。 MiniScript的外观 ## Find and return the maximum value in the [list]. def get_max ( list ) ret = list [ 0 ] for i ...
- **说明**: Groovy 中的 `yield` 语法类似于 Python 和 Ruby 中的迭代器生成方式,可以通过闭包来创建迭代器。 - **示例代码**: ```groovy class Foo { static void main(String[] args) { // yield 代码示例 ...
《Rails 2.1 API 深度解析》 Rails,全称为Ruby on Rails,是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率并实现简洁优雅的代码。Rails 2.1是其历史版本...
Eloquent是Laravel内置的ORM,提供了简洁的语法来操作数据库。 **详细知识点:** 1. **Laravel框架**:Laravel是一款基于PHP的开源Web应用框架,遵循MIT许可证。它的设计灵感来自于其他框架,如Ruby on Rails、...
编写网络爬虫可以使用多种编程语言,包括系统编程语言如C和C++以及脚本语言如Perl、Python、Java和Ruby。C和C++语言因其高效性和快速性而被广泛用于大型搜索引擎的全网爬取任务,但它们开发周期长且代码较为复杂。...
2. **DNS解析**:解析器配置(resolv.conf)和域名解析。 3. **Web服务器**:如何安装和配置Apache或Nginx,以及SSL/TLS证书的配置。 4. **邮件服务器**:如Postfix的安装和配置,实现SMTP服务。 5. **FTP服务器*...
- 其他语言如Java、C#、Ruby等也都有内置支持正则表达式的库或语法。 理解并熟练运用正则表达式是每个IT从业者必备的技能之一,无论你是前端开发者、后端工程师还是数据分析师,掌握正则都能极大地提升你的工作...