문제

고 싶을 찾아 기록에서의 조합 created_on>=어떤 날짜에 이름을 몇 가지 이름 목록이다.

에 대한">="나를 사용하여 sql 상태입니다.에 대한"에서"나를 사용해야 해시의 조건에는 키가:이름과 값의 배열 이름입니다.

하는 방법이 있을 결합한 두?

도움이 되었습니까?

해결책

당신이 사용할 수 있습 라는 범위에서 레일 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 람다를 전달할 수 있도록에서 인수

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")

다른 팁

만약 당신이 이전 버전을 사용하고,레일 Honza 의 쿼리가 가까운,그러나 당신이 필요 괄호를 추가한 문자열에 배치에 상태:

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

에서 사용할 수 있는 혼합된 가방:그것은 가장 빠른을 위해 정수장 느린에 대한 목록의 문자열입니다.는 경우에 당신은 자신을 찾을 사용하는 단 하나의 이름을 확실히 사용하여 다음 운영자:

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

시원한 것에 대해 named_scopes 는 그들은 작업에서 컬렉션을 너무:

class Post < ActiveRecord::Base
  named_scope :published, :conditions => {:status => 'published'}
end

@post = Post.published

@posts = current_user.posts.published

에 대한 더 보 named_scopes 라이언의 발표Railscast 에 named_scopes

class Person < ActiveRecord::Base
  named_scope :registered, lambda { |time_ago| { :conditions => ['created_at > ?', time_ago] } }
  named_scope :with_names, lambda { |names| { :conditions => { :names => names } } }
end

려는 경우에는 변수의 범위에 있을 사용하여 람다.

할 수 있는 체인 where 절:

Person.where(name: ['foo', 'bar', 'baz']).where('id >= ?', 42).first

명명된 범위 이미 제안은 꽤 괜찮습니다.지원 방법을 할 수 있습니다:

names = ["dave", "jerry", "mike"]
date = DateTime.now
Person.find(:all, :conidtions => ["created_at > ? AND name IN ?", date, names])

나는 하나가 사용하는 간단하 AR 측정기 또는 Searchgasm.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top