`
jsntghf
  • 浏览: 2531572 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

通过数组转置来组织ActiveRecord的conditions

阅读更多

使用ActiveRecord的conditions最基本的方法就是数组:

 

:conditions => ['first_name = ? and middle_name = ? and last_name = ?', 'George', 'W', 'Bush']

 

更灵活的方法是使用Hash来组织:

 

:conditions => {:first_name => 'George', :middle_name => 'W', :last_name => 'Bush'}

 

这样对动态构建查询条件的情况非常有帮助,比如根据查询参数来构建conditions:

 

conditions = {}
conditions.merge!({:first_name => params[:first_name]}) if params[:first_name]
conditions.merge!({:middle_name => params[:middle_name]}) if params[:middle_name]
conditions.merge!({:last_name => params[:last_name]}) if params[:last_name]

:conditions = conditions

 

但是Hash conditions也有其限制,不支持LIKE,不支持Not Null等等,能不能结合Array Conditions的强大和Hash Conditions的灵活呢?答案当然是肯定的:

 

conditions = []
conditions << ['first_name LIKE ?', "%#{params[:first_name]}%"] if params[:first_name]
conditions << ['middle_name LIKE ?', "%#{params[:middle_name]}%"] if params[:middle_name]
conditions << ['last_name LIKE ?', "%#{params[:last_name]}%"] if params[:last_name]

:conditions = [conditions.transpose.first.join(' AND '), *conditions.transpose.last]

 

其实就是通过数组转置来构建查询语句的。

分享到:
评论

相关推荐

    preload_pluck:高效地将数据加载到二维数组中,无需 ActiveRecord 模型创建开销

    向 ActiveRecord 添加一个preload_pluck方法,该方法允许使用 Rails 4 preload加载样式查询连接表 ( preload ),并返回一个没有 ActiveRecord 模型创建开销 ( pluck ) 的二维数组。 典型的用例是用于查询和显示...

    ActiveRecord简单实例_activerecord.zip

    总的来说,ActiveRecord通过简化数据库操作,使开发者能更专注于业务逻辑而不是数据库层面的细节。在实际开发中,熟练掌握ActiveRecord的使用,可以极大地提高开发效率和代码质量。通过实例练习,你可以更深入地理解...

    PHP 库通过返回原始 SQL 来实现 ActiveRecord

    在这个场景中,标题提到的"PHP 库通过返回原始 SQL 来实现 ActiveRecord",意味着这个特定的PHP库允许用户在执行数据库操作时,不仅能够直接调用方法,还能够获取到这些操作对应的原始SQL语句。这对于调试、优化或者...

    Pro ActiveRecord Databases with Ruby and Rails.pdf

    **ActiveRecord**是Ruby on Rails的核心组件之一,它提供了一种简洁的方式来进行数据库交互,通过模型对象(Models)将数据库表映射到程序中。这种方式简化了数据库操作,使得开发人员能够更加专注于业务逻辑而不是...

    NHibernate中文教程+activerecord

    ORM框架简化了数据库操作,通过将数据库表映射到类对象,允许开发者用面向对象的方式来处理数据,而无需关注底层的SQL语句。在本教程中,我们将深入探讨NHibernate的核心概念和用法。 1. **安装与配置** 在开始...

    简单Castle.ActiveRecord.Generator

    Castle.ActiveRecord.Generator 是一个基于 Castle ActiveRecord 框架的代码生成工具,它极大地简化了在.NET环境中使用ActiveRecord模式进行数据库操作的工作流程。ActiveRecord是面向对象持久化的一个设计模式,将...

    has_array_of:PostgreSQL数组上的ActiveRecord关联

    该插件使用PostgreSQL数组的功能实现了在Rails中进行has_and_belongs_to_many关联的替代方法。 在很多情况下,你只需要或的功能使用许多一对多与连接表是不必要的传统方法。 我们可以只存储id的整数数组。 它是如何...

    Castle.ActiveRecord (.NET FrameWork 2.0)

    Castle.ActiveRecord For .NET FrameWork 2.0 如果你想使用Castle.ActiveRecord,但又不想使用.NET Framework 3.0/3.5/4.0或更高版本,那么这个就是你所需要的,For .NET FrameWork 2.0,我整理了好久,自己从官方...

    C# Castle.ActiveRecord CS源码示例教程.zip

    这个教程主要围绕如何使用 Castle.ActiveRecord 在 C# 项目中实现 ActiveRecord 设计模式,以及通过 Winform 应用来展示其实现过程。 ActiveRecord 是一种设计模式,源自 Ruby on Rails,它将业务对象与数据库记录...

    [IronRuby] C# 4.0调用ActiveRecord

    它是Ruby on Rails框架中的一部分,允许开发人员通过使用Ruby代码以面向对象的方式来管理数据库记录。ActiveRecord使得数据访问代码的编写更加简洁,而且具有良好的可读性。 知识点四:C#与IronRuby的交互 由于.NET...

    PHP库通过返回原始SQL来实现ActiveRecord 用于PHP5.3和NO PDO场景的yii2 ORM移植

    首先,ActiveRecord是一种设计模式,它将数据库表的记录映射为类的对象,使得开发者可以通过操作对象属性和方法来完成对数据库的操作,降低了数据库访问的复杂性。Yii2框架原生就内置了强大的ActiveRecord实现,但这...

    scala-activerecord-specs_2.9.2-0.2.3.zip

    1. **Scala Activerecord**: Scala Activerecord是一个基于Scala语言的ORM库,它允许开发者用Scala的语法来定义模型类,这些模型类可以直接与数据库表进行交互。其设计理念是模仿Ruby on Rails中的ActiveRecord模式...

    MyBatisPlus的ActiveRecord实现CRUD示例代码

    在MyBatisPlus中,创建数据主要通过实体类和Service层来完成。首先,定义一个实体类,例如`User`,并使用`@TableId`注解指定主键字段。然后,在Service层中调用`insert`或`insertOrUpdate`方法,MyBatisPlus会自动...

    ActiveRecord 升级NHibernate到3.3.0GA

    将ActiveRecord中的NHibernate升级到3.3.0GA,排除编译的bug问题,保留ActiveRecord的完整功能,【Castle.ActiveRecord 升级NHibernate到3.4.0GA】的功能不完整!

    Castle.ActiveRecord 升级NHibernate到3.4.0GA

    Castle.ActiveRecord官方已经停止更新了,官方最高支持到NHibernate 3.1.0.4000,这个版本还有不少问题(例如:[NH-2213] - CLONE -Wrong parameters order in IQuery with SetParameterList and Filter)。...

    ActiveRecord简单实例代码.zip

    ActiveRecord允许你序列化复杂的数据类型,如哈希或数组,将其存储为单个数据库列。这对于存储JSON数据或配置信息非常有用。 9. **事务** ActiveRecord提供了事务处理,确保一组数据库操作要么全部成功,要么全部...

    castle ActiveRecord 源代码

    1. **元数据映射**:Castle ActiveRecord使用XML或者Fluent API来定义对象与数据库表之间的映射关系,这包括字段、属性、主键、外键等信息。通过元数据,Castle ActiveRecord能自动建立对象与数据库之间的桥梁。 2....

    Java敏捷持久层-ROR-ActiveRecord持久层框架的Java实现

    这样,开发者可以通过操作对象的方式来间接操作数据库,极大地提高了开发效率。 在Java中,实现ActiveRecord的框架通常会提供以下功能: 1. 自动数据映射:Java类的属性与数据库表的字段一一对应,框架会自动处理...

    Castle ActiveRecord快速入门指南、ActiveRecord帮助文档

    - Castle ActiveRecord 可以通过 NuGet 包管理器在 Visual Studio 中安装,输入 "Castle.ActiveRecord" 即可找到相应的包。 - 确保已经安装了 Castle.Core 和 NHibernate(因为 ActiveRecord 基于 NHibernate 实现...

    Ruby-Ancestry将ActiveRecord模型组织成一个树状结构

    这个库特别适用于那些需要处理有层级关系数据的场景,比如分类、菜单系统、组织架构等。Ancestry通过提供一系列便捷的方法,使得在数据库中存储和查询这些层次数据变得简单高效。 在Ruby on Rails应用中,...

Global site tag (gtag.js) - Google Analytics