2016-10-05 41 views
11

kullanma Raylar 4.2.1 ve Active Yönetici 1.0.0.pre2Filtre birçok işgallerinin olan bir Daire modelimiz var

geçti. Yöneticilerin, endekste bir dairenin param olarak geçen tarihlerle örtüşüp örtüşmediğini görebilmelerini istiyorum. Ben apartman verilen iki tarih ile örtüşen herhangi işgallerinin varsa true döndürür Daire

def available_during(start_date, end_date) 
    return !self.occupancies.any? { |occ| occ.date_range_overlap(Date.parse(start_date), Date.parse(end_date)) } 
end 

üzerinde bir yöntemi var. Doluluk hakkında date_range_overlap yöntemi oldukça açıklayıcıdır. ActiveAdmin'in DSL'sini bu yönteme göre filtrelemeyi ve hatta rasgele paramiklere giriş yapmak için nasıl bir form oluşturacağını anlayamıyorum.

Dizinde available_during yönteminin boole dönüş değerini gösteren bir sütun koyabiliyordum.

if params[:from] && params[:until] 
    column "available?" do |apt| 
    apt.available_during(params[:from], params[:until]) 
    end 
end 

ama bir tek bu elle gelen ve url params kadar girerek işe gitmek için görünebilir.

Kullanıcıyı doğru parametrelere göndermek için nasıl rastgele bir arama formu yerleştirebilirim? Veya daha iyisi, bu yöntemi kullanan bu kenar çubuğunda bir filtre yapın?

cevap

2

ActiveAdmin'in görünümde bir tarih seçicisi oluşturmak için yerleşik bir yöntemi vardır. Bu dokümanlar here bulunabilir. Örnek, bazı rasgele parametrelerle kullanıldığını gösterir, kullanım durumunuz için bunları değiştirmek isteyeceksiniz.

form do |f| 
    f.input :from, as: :datepicker, 
    datepicker_options: { 
    min_date: "2013-10-8", 
    max_date: "+3D" 
    } 

    f.input :until, as: :datepicker, 
    datepicker_options: { 
    min_date: 3.days.ago.to_date, 
    max_date: "+1W +5D" 
    } 
end