說例如我有一個事件start_date
和length
(以整數表示天數)。Rails&Ransack - 根據模型中的定義進行排序/搜索
在我定義end_date
爲start_date + length.days
模型很簡單,你所期望的:
def end_date
start_date + length.days
end
所有在模板中正常工作,我可以用event.end_date
顯示起始日期加上然而,許多天長度爲,但是,我想現在使用Ransack命令結束日期。
的排序鏈接start_date
看起來是這樣的:<%= sort_link @q, :start_date, "Start" %>
如果我嘗試END_DATE(<%= sort_link @q, :end_date, "End" %>
)同它作爲我相信它是尋找end_date
作爲表中的列,並沒有找到這不幸的是靜靜地失敗。
我只是很笨或我想做點什麼Ransack根本就沒做?
看起來像ransack將搜索參數轉換爲ActiveRecord ORM上的查詢 - 除非您有底層數據庫可以搜索的實列,否則這肯定會失敗。 – bdares 2013-03-07 02:06:18
感謝評論@bdares。我現在已經設法在模型中設置'ransacker:end do | r |'爲:'Arel :: Nodes :: SqlLiteral.new(「DATE_ADD(events.start_date,INTERVAL events.length DAY)」)'。它產生查詢:'SELECT DISTINCT events。* FROM events ORDER BY DATE_ADD(events.start_date,INTERVAL events.length DAY)DESC LIMIT 30 OFFSET 0'。這確實有用,但感覺非常「可笑」。 – bensmithbwd 2013-03-07 03:15:08
@bensmithbwd - 在評論中很難看到完整的解決方案。謹慎寫出一個完整的例子,以便我們更好地理解解決方案。然後你可以接受你自己的答案。 – 2013-03-13 02:16:48