当前位置:  开发笔记 > 后端 > 正文

混合ActiveRecord查找条件

如何解决《混合ActiveRecord查找条件》经验,为你挑选了2个好方法。

我想在某些名称列表中查找created_on> =某个日期和名称组合的记录.

对于"> ="我必须使用sql条件.对于"IN",我必须使用条件的哈希,其中键是:name,值是名称数组.

有没有办法将两者结合起来?



1> Laurie Young..:

您可以在rails 2.1及更高版本中使用命名范围

Class Test < ActiveRecord::Base
  named_scope :created_after_2005, :conditions => "created_on > 2005-01-01"
  named_scope :named_fred, :conditions => { :name => "fred"}
end

那么你可以做到

Test.created_after_2005.named_fred

或者你可以给named_scope一个lambda,允许你传入参数

Class Test < ActiveRecord::Base
  named_scope :created_after, lambda { |date| {:conditions => ["created_on > ?", date]} }
  named_scope :named, lambda { |name| {:conditions => {:name => name}} }
end

那么你可以做到

Test.created_after(Time.now-1.year).named("fred")



2> Josh Schwart..:

如果您使用的是较旧版本的Rails,Honza的查询很接近,但您需要为处于IN条件的字符串添加括号:

Person.find(:all, :conditions => ["created_at > ? AND name IN (?)", date, names])

使用IN可以是一个混合包:它对于整数来说最快,对于一个字符串列表来说速度最慢.如果您发现自己只使用一个名称,请务必使用等于运算符:

Person.find(:all, :conditions => ["created_at > ? AND name = ?", date, name])

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有