大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 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根本不做的事情?
在我定义END_DATE的模型中
def END_DATE start_date + length.days end
然后我为:END_DATE添加了’rankingacker’方法
ransacker :END_DATE do |r| Arel::Nodes::SqlLiteral.new("DATE_ADD(`events`.`start_date`,INTERVAL `events`.`length` DAY)") end
老实说,我不知道这是否是执行上述条款的最佳/正确方法,但我对SQL比熟悉Ruby / Rails更熟悉,所以它对我来说非常开放.
有效地做的是创建一个SQL,它通过与END_DATE相同的定义来命令查询(start_date length)
我现在可以在模板中使用以下代码进行排序链接(允许Ransacker处理ASC / DESC而不干扰wil_paginate等):
<%= sort_link @q,“事件结束日期”%>
当您单击该链接时,您将获得以下行的查询:
SELECT DISTinCT事件.* FROM事件ORDER BY DATE_ADD(events.start_date,INTERVAL events.length DAY)DESC LIMIT 30 OFFSET 0 – 所有由Ransacker在表格中的一列上创建和处理,甚至不存在!
再一次,一个快速的免责声明,我已经学习Rails和Ruby大约2周了,来自php的背景,所以我不是专家,这可能是非常低效或者可能有更好的’轨道方式’我根本就不知道.
以上是大佬教程为你收集整理的ruby-on-rails – Rails&Ransack – 根据模型中的定义进行排序/搜索全部内容,希望文章能够帮你解决ruby-on-rails – Rails&Ransack – 根据模型中的定义进行排序/搜索所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。