加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails&Ransack – 根据模型中的定义进行排

发布时间:2020-12-16 23:13:45 所属栏目:百科 来源:网络整理
导读:比如说我有一个带有start_date和length的事件(表示天数的整数). 在模型中,我将end_date定义为start_date length.days,就像您期望的那样: def end_date start_date + length.daysend 一切都在模板中工作正常,我可以使用event.end_date来显示开始日期加上长度
比如说我有一个带有start_date和length的事件(表示天数的整数).

在模型中,我将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的背景,所以我不是专家,这可能是非常低效或者可能有更好的’轨道方式’我根本就不知道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读