Örneğin, start_date
ve length
ile bir olayım var (gün sayısını tamsayı olarak). Ben end_date
start_date + length.days
olarak tanımladığımız modelde Rails & Ransack - Modeldeki bir tanıma göre sıralama/arama
def end_date
start_date + length.days
end
Tüm şablonunda çalışıyor, ben başlangıç tarihini görüntülemek için event.end_date
kullanabilirsiniz artı kaç gün boyu olarak ayarlandı ancak , ancak, şimdi Ransack kullanarak olayları bitiş tarihine göre sıralamak istiyorum.
start_date
için sıralama bağlantı şuna benzer: Ben tablodaki bir sütun olarak end_date
arayan ve onu bulmak değil tahmin olarak <%= sort_link @q, :start_date, "Start" %>
ben end_date (<%= sort_link @q, :end_date, "End" %>
) için aynı çalışırsanız ne yazık ki sessizce başarısız olur.
Sadece aptal mıyım yoksa Ransack bir şey yapmaya çalışmıyorum mı? Sonra bir 'ranksacker' yöntemi eklendi ben end_date
def end_date
start_date + length.days
end
tanımlanan modelde
: Sadece nasıl yaptığımı görmek isteyen herkes yararına
ransack, arama parametrelerini ActiveRecord ORM'deki sorgulara çevirir - temelde DB'nin üzerinde arama yapabileceği gerçek bir sütun olmadıkça kesinlikle başarısız olur. – bdares
Yorum için teşekkürler @bdares. Şu anda modelde ransacker: end do | r | 'ayarlamayı başardım:“ Arel :: Nodes :: SqlLiteral.new ("DATE_ADD (events.start_date, INTERVAL events.length DAY)"). Hangi sorguyu üretir: 'DISTINCT olayları SEÇİN. * DATE_ADD (events.start_date, INTERVAL events.length GÜNDÜZ) SİPARİŞİNDEN OLUŞTURULAN olaylardan. DESC LIMIT 30 OFFSET 0'. Bu işe yarıyor ama korkunç 'hacky' hissediyor. – bensmithbwd
@bensmithbwd - Yorumunuzda tam çözümü görmek zor. Çözümün daha iyi anlaşılmasını sağlayabilmek için tam bir örnek oluşturmaya özen gösterin. Sonra kendi cevabınızı kabul edebilirsiniz. –