`

使用scope 链接多个where条件

阅读更多

  scope :by_category, (lambda do |category_id|
    where(category_id: category_id) unless category_id.nil?
  end)
  scope :by_district, (lambda do |district_id|
    where(district_id: district_id) unless district_id.nil?
  end)
#if district 是nil就会返回全部
Client.by_category(category).by_district(district)




class User
  scope :by_age, lambda do |age|
    joins(:profile).where('profile.age = ?', age) unless age.nil?
  end
  scope :by_name, lambda{ |name| where(name: name) unless name.nil? }
  scope :by_email, lambda do |email|
    joins(:profile).where('profile.email = ?', email) unless email.nil?
  end
end




wheres = [:id, :email].map{|key| params.has_key?(key) ? {key => params[key]} : {} }\
                      .inject({}){|hash, injected| hash.merge!(injected)}
@users = User.where(wheres).limit(10)





#user.rb
scope :by_status, lambda { |status| where(:status => status) unless status.blank? }

# If you need to execute a block of code you can use the following syntax
scope :by_status, (lambda do |status|
where(:active => status) unless status.blank?
end)


#Active users
pry(main)> User.by_status(1)
SELECT `users`.* FROM `users` WHERE `users`.`active` = 1

#Inactive users
pry(main)> User.by_status(0)
SELECT `users`.* FROM `users` WHERE `users`.`active` = 0

#All users
pry(main)> User.by_status(nil)
SELECT `users`.* FROM `users`

分享到:
评论

相关推荐

    数据库连接池查询

    数据库连接池是一种用于管理数据库连接的技术,它能够预先创建多个数据库连接,并将这些连接保存在一个池中供应用程序重复使用,从而避免了频繁创建和关闭数据库连接所带来的性能开销。在实际应用中,通过合理配置...

    修改数据库最大连接数以及linux系统下ORACLE数据库启动多实例借鉴.pdf

    Oracle数据库在Linux系统下可以启动多个实例,每个实例都是独立的数据库环境。下面是启动Oracle数据库多实例的步骤: 1. 启动监听:使用lsnrctl start语句启动数据库监听服务。 2. 切换到Oracle用户:使用su - ...

    修改数据库最大连接数以及linux系统下ORACLE数据库启动多实例参照.pdf

    2. 查看当前数据库允许的最大连接数:select value from v$parameter where name = 'processes'; 3. 修改最大连接数:alter system set processes = 600 scope = spfile; 4. 重启数据库:shutdown immediate; 5. ...

    第01节:基于事务同时执行多个对象的增删改源代码.rar

    基于事务同时执行多个对象的增删改(1)"和"第02节:基于事务同时执行多个对象的增删改(2)"可能包含了更具体的代码示例和解释,涵盖了如何在实际项目中应用这些概念,可能涉及到多个数据库连接、异常处理以及优化...

    修改oracle最大连接数

    - 调整最大连接数后,还需要考虑服务器硬件资源(如内存、CPU等)是否足够支持更多的并发连接。 - 如果遇到性能问题,可能还需要调整其他相关参数,如`shared_pool_size`或`large_pool_size`等。 通过以上步骤,您...

    Tomcat下的数据库连接

    总的来说,配置Tomcat的JNDI DataSource涉及多个步骤,包括放置JDBC驱动,修改`server.xml`和`web.xml`文件,以及在应用程序中正确地查找和使用DataSource。通过这种方式,我们可以实现数据库连接的集中管理和复用,...

    oracle连接数

    1. **连接数与进程数的关系**:在Oracle中,一个会话(Session)对应一个或多个进程(Process),具体关系可以通过以下公式估算:`sessions = (1.1 * processes + 5)`。这表示会话数通常略大于进程数。 2. **查询...

    oracle笔试和面试题

    本资源摘要信息涵盖了 Oracle 相关的笔试和面试题,包括表连接方式、SQL 执行计划、CBO 和 RULE 的区别等多个方面的知识点。 表连接方式: * Inner Join: Inner Join 用于连接两个表,并返回满足连接条件的记录。...

    oracle常用操作.doc

    创建PFILE后,可以编辑这个文本文件,然后使用`ALTER SYSTEM SET PROCESSES=value SCOPE=BOTH`来立即应用更改,但这种修改不会持久化,重启数据库后会恢复到SPFILE中的设置。 5. **重启数据库**: 当你需要应用...

    Oracle优化常用概念.pptx

    总的来说,Oracle数据库优化涉及多个方面,包括选择合适的优化器模式、使用适当的表连接方式、理解并优化执行计划以及维护准确的统计信息和柱状图。这些概念的理解和应用对于提升数据库性能至关重要。

    loadrunner 培训

    当需要调整连接数时,可以使用 `alter system set processes=value scope=spfile` 和 `alter system set sessions=value scope=spfile`,并重启数据库使更改生效。 2. 系统资源监控: - 查看内存使用情况:使用 `...

    性能分析 -线程

    本文主要围绕《性能分析—线程》这一主题,从多个角度深入探讨线程的相关知识点,包括线程控制、线程数量设置、数据库连接池配置以及JVM监控等方面。 #### 二、线程控制 线程控制是性能分析中的一个重要方面。合理...

    韩顺平玩转Oracle 课件

    - **多表连接查询**:使用 `JOIN` 关键字连接多个表。 - `SELECT * FROM table1 JOIN table2 ON table1.column = table2.column;` - **子查询**:在 SELECT 语句中嵌套另一个 SELECT 语句。 - `SELECT * FROM ...

    C#数据库

    在IT领域,C#是一种广泛...以上就是C#数据库开发的一些关键知识点,涵盖从连接数据库到执行查询,再到事务管理和异步操作等多个方面。掌握这些内容,你就能在C#环境中有效地与数据库进行交互,构建功能丰富的应用程序。

    Linux常用命令 数据库常用命令

    从给定的文件信息中,我们可以提取并生成与IT领域相关的多个知识点,主要围绕Linux常用命令、数据库常用命令,以及Windows环境下VHD虚拟磁盘的管理和数据库连接数的监控与调整。 ### Windows环境下VHD虚拟磁盘管理 ...

    MDX用户指南 内容比较全,详细讲解了基本概念和函数

    - **WHERE子句**:用于过滤特定条件的成员。 - **SET定义**:创建一组成员,可基于其他集合或成员运算。 - **轴(Axes)**:MDX查询可以有多个轴,每个轴代表结果集的一个方向。 - **TOP、BOTTOM函数**:用于...

    oracle基础知识.docx

    在Oracle中,有多个关键概念和技术值得了解,以下是一些基于提供的文件内容的重要知识点: 1. **查询数据库版本**: 使用`SELECT * FROM v$version;`可以查看当前Oracle数据库的版本信息,包括Oracle版本、发行版...

    Oracle查看和修改连接数(进程/会话/并发等等)

    在Oracle中,有多个后台进程执行不同的任务,如LGWR(日志写入器)、SMON(系统监控)和PMON(进程监控)等,它们对数据库的正常运行至关重要。 11. **死锁处理**: Oracle提供了死锁检测和解决机制,当检测到...

    c#使用WMI更改IP地址

    注意,这种方法需要管理员权限运行,且在实际部署时要考虑网络环境的差异,如多个网络适配器、动态IP分配等情况。在项目中,你可能需要封装这些功能到一个类库中,以便于复用和管理。文件名“WindowsForms...

Global site tag (gtag.js) - Google Analytics