快速业务通道

Ruby on rails开发从头来(四十八)- ActiveRecord基础(动态查询) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

Ruby on rails开发从头来(四十八)- ActiveRecord基础(动态查询)

时间:2011-12-04 博客园 Cure

数据库上最常运行的查询莫过于根据指定条件返回符合的结果集,查询可能是返回所有名字为‘dave’的订单,或者是某个博客上所有标题含Rails的post,在很多其他的框架和程序设计语言中,你需要创建sql来执行查询,Active Record利用了ruby语言所包含的动态能力来做这些事。

例如,我们的Order Model包含了诸如name,email,address这样的属性,我们可以使用这些名字对应的find方法来查询,例如:

order = Order.find_by_name("Dave Thomas")
orders = Order.find_all_by_name("Dave Thomas")
order = Order.find_all_by_email(params[''email''])

如果你调用了一个Model类的find_by_或者find_all_by_这样字符串打头的格式的方法,Active Record将它们转换成一个查询器(finder),而将方法后面的字符串作为字段名转换find方法的参数,例如:

  order = Order.find_by_name("Dave Thomas", other args...)

上面的调用等效的转换为:

  order = Order.find(:first,
:conditions => ["name = ?", "Dave Thomas"],
other_args...)

类似的,调用一个find_all_by_xxx方法相当于调用find(:all,… )方法。

到这里魔术还没有停止,Active Record还可以对多个列创建查询器(finder),例如,你可以写:

  user = User.find_by_name_and_password(name, pw)

相当于:

  user = User.find(:first,
:conditions => ["name = ? and password = ?", name, pw])

为了确定要检查哪些字段,Active Record简单的分割find_by_和find_all_by_后面的字符串,这在大多数情况下是够用的,除非你的根本就没有某个在方法名中包含的字段。

注意,Active Record并不提供在find_by_或find_all_by后面的两个字段名中含有_or_。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号