我想在某些名称列表中查找created_on> =某个日期和名称组合的记录.
对于"> ="我必须使用sql条件.对于"IN",我必须使用条件的哈希,其中键是:name,值是名称数组.
有没有办法将两者结合起来?
您可以在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")
如果您使用的是较旧版本的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])