2012-11-08 13 views
11

Beynimi bunun üzerinde sardım ama alamıyorum.Raylar için Ransack üzerinde varsayılan arama parametresinin ayarlanması

ben altüst kullanarak arama yapabilirsiniz İşler bir dizi listeleyen bir indeks denetleyicisi vardır: cevap ne yapmaya çalışıyorum şudur muhtemelen

açıktır gibi hissediyorum. Her işin, içinde bir tarihi olan veya boş (tamamlanmamış) bir tamamlanma tarihi vardır. Şu anda arama kendisi harika çalışıyor. İndeks sayfasının sadece bitmemiş işi göstermesini sağlamak için bunu yapmak isterim, ama aynı zamanda çalışmayı da istiyorum, böylece birisi arama yaptığında, hem bitmiş hem de bitmemiş işler için sonuçlar döndürür.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır. Aşağıdaki kodda: gerçek, tamamlanma tarihi ile alanın adıdır. Aynı zamanda web’e bakıyordum ve iş modelinde sahip olduğum DEFAULT_SEARCH_PARAMETER = {} gibi bir şeyin işe yarayabileceğini düşündüm ama bunu elde edemedim.

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 

cevap

18

ben arama parametreleri de olmadığında sadece kendi filtre uygulamak düşünüyorum:

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

Teşekkürler! Bu çalıştı. Buna oy verirdim ama itibarım yok. –

+0

Bunu izlemeden önce ricsrock'un daha iyi cevabını kontrol edin. –

0

Varsayılan olarak, sayfanın gerçekte sıfır olan kayıtlarla yüklenmesini istiyorsunuz. Daha sonra, kullanıcı aradığında, aramanızın daha önce nasıl çalıştığına geri dönmek istersiniz.

Bunu bir deneyin.

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

Bunu denedim ama işe yaramadı. Yardımın için teşekkürler! –

27

Geç partiye, ama başka durumda birisi alternatif bir yaklaşımı öneririm düşünce bunun karşısında gelir.

Yukarıdaki yanıt çalışır, ancak onun dezavantajı, Ransack'in arama nesnesine varsayılanın eklenmemesidir; bu nedenle, eğer bir arama formu kullanıyorsanız, varsayılan seçim formda gösterilmez.

Aşağıdaki yaklaşım, varsayılanı arama nesnesine ekler ve bu nedenle arama formunuzda görünecektir.

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

Bu kabul edilen cevap olmalı. – johnrees

+0

Hey @rics, bu listeyi beyaz listeye eklenmiş bir kapsamla nasıl yapacağınıza dair herhangi bir fikriniz var mı? – bnussey

+0

Güzel cevap @ricsrock. Ransack aramasını değiştirdiğinden, eklediğiniz varsayılan öğenin, oluşturulmuş sayfanın bir arama bölümünde doğru şekilde görünmesi kolaydır. –

İlgili konular