created_on> =いくつかの日付リストと名前の組み合わせでレコードを検索したいのですが。ActiveRecordの条件を混在させる
"> ="私はSQL条件を使用する必要があります。 "IN"の場合は、キーが次の条件のハッシュを使用する必要があります。名前と値は名前の配列です。
2つを組み合わせる方法はありますか?
created_on> =いくつかの日付リストと名前の組み合わせでレコードを検索したいのですが。ActiveRecordの条件を混在させる
"> ="私はSQL条件を使用する必要があります。 "IN"の場合は、キーが次の条件のハッシュを使用する必要があります。名前と値は名前の配列です。
2つを組み合わせる方法はありますか?
あなたは、あなたが
Test.created_after_2005.named_fred
を行うことができ、レール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
上記の名前のスコープを使用するかは、あなたが引数に渡すことができるようにラムダを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
することができます
あなたは、ラムダを使用する必要があなたのスコープに変数を渡ししようとしている場合named_scopesの詳細についてTest.created_after(Time.now-1.year).named("fred")
はRyan's announcementとRailscast on 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
を参照してください。
すでに提案されている名前付きスコープはかなり上手くいます。それを行うにはclasic方法は次のようになります。あなたは、古いバージョンのRailsを使用している場合
names = ["dave", "jerry", "mike"]
date = DateTime.now
Person.find(:all, :conidtions => ["created_at > ? AND name IN ?", date, names])
、Honzaのクエリは近いですが、あなたはIN条件に置かれます文字列の括弧を追加する必要があります。
INを使用すると、整数が最も速く、文字列のリストが最も遅くなります。あなただけの1人の名前を使用して自分自身を見つける場合は、間違いなくオペレータに等しい使用:
Person.find(:all, :conditions => ["created_at > ? AND name = ?", date, name])
私はどちらかの単純なARファインダーやSearchgasmを使用するつもりだと思います。
named_scopesについてのクールなことは、彼らがあまりにもコレクションに取り組むことです。
class Post < ActiveRecord::Base
named_scope :published, :conditions => {:status => 'published'}
end
@post = Post.published
@posts = current_user.posts.published
することはできチェーンwhere
句は:
Person.where(name: ['foo', 'bar', 'baz']).where('id >= ?', 42).first