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")
分享到:
相关推荐
Ruby基本语法
Treetop - PEG (解析表达式语法) 解析器
ruby常用语法整理,大部分是晚上能找到的,做了一下整理
Ruby基础语法经典学习PPT教程. 网上关于ruby的PPT教程不太多,这个个人觉得还可以。
Text Processing with Ruby ruby文档解析 完整版 完整版
ruby-4-variables.mp4 ruby-5-variables-rules.mp4 ruby-6-expression.mp4
ruby语法基础教程,学习ruby的入门教程。
使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库...
publicsuffix-ruby, 在 public 后缀列表中,基于 ruby的域名解析器 用于 ruby的public 后缀PublicSuffix是一个基于 public 后缀列表的ruby 域 NAME 解析器。 要求ruby> = 2.1对于较老版本的ruby,使用以前的版本。...
这是一个短小的Ruby入门,完全读完只需20分钟。这里假设读者已经安装了Ruby,如果你没有安装的话,请在阅读文前访问Ruby官方网站进行下载并安装。
PSD.rb - 在Ruby中轻松解析Photoshop文件
本文的目的是为了找出为什么.NET程序员都想学习并使用Ruby,并探索Ruby语言的核心语法。
ruby使用REXML解析处理xml.pdf
前端学 Ruby:熟悉 Ruby 语法
ruby对xml文件的解析,不是很全,应该还是有一定帮助的
<<Prorammer ruby>> 经典语法截图
Ruby是一种动态、面向对象的编程语言,它具有简洁、易读的语法,被称为“程序员最好的朋友”。Ruby具有强大的元编程能力,允许开发者在运行时动态修改和生成代码。Ruby还有一个强大的标准库,提供了丰富的工具和功能...
NULL 博文链接:https://mojianpo.iteye.com/blog/727252
ruby语法基础教程及Ruby教程中文版和安装文件,三者集于一个文件夹内