zoukankan      html  css  js  c++  java
  • Ruby on rails开发从头来(四十八) ActiveRecord基础(动态查询)

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

       例如,我们的Order Model包含了诸如nameemailaddress这样的属性,我们可以使用这些名字对应的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_
  • 相关阅读:
    用Taro写一个微信小程序——版本升级
    matlab subplot 的边距(with tight margins)
    Nginx(Tengine) 解决 unknown directive "stream" 问题
    MinIO 分布式集群搭建
    Docker 及 Docker Compose 日常操作(团队培训材料)
    基于 AdoptOpenjdk 官方 Dockerfile 制作 jre8 镜像(修改字符集和时区)
    Syncthing 开源文件同步工具
    Harbor 2.2.0 搭建与使用
    Centos7 使用 chronyd 进行时钟同步
    Centos7 安装 Python3 及配置国内源、虚拟环境
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/ruby_rails_study_48.html
Copyright © 2011-2022 走看看