说例如我有一个事件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