2012-11-08 25 views
11

私はこれ以上私の脳を壊してきましたが、それを得ることはできません。私は掻き回すを使用して検索できる一連のジョブを一覧表示し、インデックスコントローラを持ってレールのためのRansackのデフォルトの検索パラメータを設定

:私は答えはおそらく明らかであるように私は何をしようとしている

は以下の通りであると感じています。各ジョブには完了日付があり、日付には日付が含まれているか、またはnull(未完了)です。現在、検索自体は素晴らしいです。インデックスページが未完成の作業のみを表示するようにロードするようにしたいが、誰かが検索を実行したときに完了した作業と未完了の作業の両方の結果を返すようにしたい。

ご協力いただければ幸いです。以下のコードでは、actualは完了日のフィールドの名前です。私もWebを見ていて、JobモデルにあるDEFAULT_SEARCH_PARAMETER = {}のようなものが動作するかもしれないと思ったが、それを得ることができなかった。

class Job < ActiveRecord::Base 
    DEFAULT_SEARCH_PARAMETER ={} 
    attr_accessible :items_attributes, :actual 
end 

def index 
    @search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER) 
    @search.build_condition 
    @results = @search.result 
    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end 

答えて

18

私は検索パラメータが存在しないとき、あなたは自分自身のフィルタを適用することができると思う:

def index 
    @search = Job.search(params[:q]) 
    @results = @search.result 
    @results = @results.where(:your_date => nil) unless params[:q] 
    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end 
+2

ありがとう!これはうまくいった。私はこれを投票するだろうが、私は評判がない。 –

+0

ricsrockのより良い答えを確認してから、これを実行してください。 –

0

デフォルトでは、実際にはnilのレコードがページにロードされます。そして、後でユーザーがあなたの検索をどのように以前に動作していたかに戻って検索したいとき。

これを試してください。

def index 
    @search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER) 
    @search.build_condition 
    @results = @search.result 
    if @results.nil? 
     @results=Job.find(:all, :conditions => ["actual = NULL"]) 
    end 

    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end  
+0

私はこれを試してみましたが、うまくいきませんでした。しかし、助けてくれてありがとう! –

27

後期パーティーに、私は他のケースの誰かに別のアプローチをお勧めしたいと思いましたこれに遭遇する。

上記の答えはうまくいきますが、デフォルトはRansackの検索オブジェクトに追加されないため、検索フォームを使用している場合、デフォルト選択はフォームに表示されません。

以下の方法では、検索オブジェクトにデフォルトが追加されるため、検索フォームに表示されます。

def index 
    @search = Job.search(params[:q]) 
    @search.status_cont = 'Open' unless params[:q] #or whatever, must use Ransack's predicates here 
    @results = @search.result 
    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end 
+0

これは受け入れられる回答である必要があります。 – johnrees

+0

ホワイトリストに載っている範囲でこれを行うにはどうすればいいですか? – bnussey

+0

ニースの回答@ricsrock。 Ransack検索を変更したので、追加したデフォルトを簡単にレンダリングしたページの検索セクションに表示されます。 –

関連する問題