2012-03-01 16 views
2

:私は、クエリを構築し、一緒にそれを使用する方法のいずれかの例を見つけることができません私は、次の線に沿って何かやろうとしている

if start_date? 
    query = where("datetime > :start_date", :start_date => start_date) 
end 

if end_date? 
    query = where("datetime <= :end_date", :end_date => end_date) 
end 

if client 
    query = where("client.name LIKE :client", :client => client) 
end 

if staff 
    query = where("staff.name LIKE :staff", :staff => staff) 
end 

paginate :per_page => 20, :page => page, 
      :conditions => query, 
      :order => 'datetime' 

をpaginateプラグイン。もちろん、私は他のテーブルの他のプロパティに対してクエリを行うことができるように結合を行う方法を理解しなければならないので、クエリは正しくありませんが、それ以外の条件ではクエリをどのように構築します?

答えて

0

.where()のActiveRecordを返す::関係

.paginate() 'S:条件パラメータは、それが.whereの引数(だったかのような条件の配列でなければなりません)。

あなたは次のようにコードを修正する必要があります。

if start_date? 
    query = ["datetime > :start_date", :start_date => start_date] 
end 

など

+0

どのようにしてクエリを作成できますか?これらを一緒に連結することはできますか? – Kezzer

+0

query = ["datetime>:start_date"、:start_date => start_date]; –

3

次のような場所を呼び出し、(すべて1行、スプリットのチェーンの端に.paginateコールを入れたいです読みやすさのためにアップ)

SomeClass.where("datetime > :start_date", :start_date=>start_date). 
    where("datetime < :end_date", :end_date=>end_date). 
    paginate(:per_page=>20,:page=>page) 

あなたは条件付きで条件を追加したい場合は、あなたのような、あまりにもそれを行うことができます。

x = SomeClass 
x = x.where("datetime > :start_date", :start_date=>start_date) if start_date 
x = x.where("datetime < :end_date", :end_date=>end_date) if end_date 
x.paginate(:per_page=>20,:page=>page) 
+0

これはやり方ですが、私が追加することの1つは 'x = SomeClass.scoped'です。あなたのモデルの中に 'x = scoped'だけあります。 – dombesz

+0

私はいくつかの記事をスコープで見ましたが、私はそれが私の場合には当てはまるのかどうかは分かりませんでしたが、 – Kezzer

+0

私は今晩家に帰ると3倍チェックします。私のプロジェクトは私の家のマシンです。そう – Kezzer

関連する問題