- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题是:“给定一家公司,我应该如何构建返回所有事件的查询,该查询由所有员工在各自的就业期间创建强>?"
例如:
@company = Company.create
# Welcome John
@john = User.create
@event_a = @john.events.create date: Date.new(2013,6,1)
@event_b = @john.events.create date: Date.new(2014,1,1)
@company.employments.create user:@john, since: Date.new(2013,12,20)
# Welcome Jack
@jack = User.create
@event_c = @jack.events.create date: Date.new(2012,1,1)
@event_d = @jack.events.create date: Date.new(2013,1,1)
@company.employments.create user:@jack,
since: Date.new(2011,12,20), till: Date.new(2012,12,31)
@company.events
=> [@event_b, @event_c]
# @event_a is not returned because it was created prior to John's hiring
# @event_d is not returned because it was created after Jack's departure
我想出了一个解决方案,但我想知道是否有任何方法可以改进它。
class Event
belongs_to :user
# attributes
# date: datetime
# …
end
class Employment
belongs_to :user
belongs_to :event
# attributes
# since: date
# till: date
# …
end
class Company
has_many :employments
def events
Event.where employments.map do |e|
if e.since && e.till
"(user_id = '#{e.user_id}' AND date BETWEEN '#{e.since}' AND '#{e.till}')"
elsif !e.since.nil?
"(user_id = '#{e.user_id}' AND date > '#{e.since}')"
else
"(user_id = '#{e.user_id}')"
end
end.join(' OR ')
end
end
您认为还有其他方法可以做到这一点吗?
最佳答案
Events.joins(user: :employments).where(company_id: id)我相信你可以使用这样的东西:
def events
Event.where employments.map do |e|
user=User.find(e.user_id)
since = e.since
till = e.till || Date.parse('3100-12-31') # a day in the distant future if nil
user.events.where('(date is null) or (date > ? and date < ?)', since, till)
end
end
第二次尝试,在使用适当的连接连接 Event 和 Employment 模型后,您可以使用最后的 where
子句来实现您的过滤器。
在您添加了正确的一组连接和过滤器(感谢)之后,完整方法如下所示。
def events
Events.joins(user: :employments).where(company_id: id). # <-This comes from the author, not me.
where('employments.since is null OR
(employments.since < events.date AND employments.till is null) OR
(employments.since < events.date AND employments.till > events.date)')
end
关于ruby-on-rails - Rails 4 查询,按条件范围从具有许多直通属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24300701/
将 SQL Passthrough 工具与 SAS 一起使用是否有任何优势? 最佳答案 虽然这个问题过于宽泛,但我可以提供一个过于宽泛的答案。 SAS 中的直通 SQL 允许您直接与数据库通信。当您使
我最近一直在使用 nginxdemo/nginx-ingress Controller 。 据我了解,该 Controller 无法执行 SSL Passthrough(我的意思是将客户端证书一直传递
我正在使用 Virtual Box USB 直通功能将串口连接到 Ubuntu (/dev/ttyUSB0)。此端口用于与 3dm-gx2 IMU 通信.相同的端口适用于供应商提供的 Windows
我有一个使用客户端身份验证的 Web 应用程序,它可以正常工作。 我的问题:网络应用程序需要与第 3 方 RESTful 服务交互。 Kicker:该服务需要使用 Web 应用程序正在使用的相同证书进
CSS: ol { margin: 0 30px; } li { margin: 15px 0; } li.done { text-de
我想从 DB2 中检索与 DB1 表中的标识符匹配的记录列表,就像常规 SAS 子查询一样。如何使用 SAS 直通 SQL 执行此操作? 使用常规 SAS SQL 在 db1 上执行(长而复杂的)SQ
我创建了一个简单的 (asmx) Web 服务,它返回一个数据集。我已使用“数据”->“来自 Web”按钮将 Web 服务添加到我的 Excel 2007 工作簿中,并且可以查看/刷新数据。 当我需要
我正在写一个画廊领域。该字段是ManyToManyField的子类,并添加了自己的ajax小部件和内容。我想使该解决方案尽可能紧凑(我的意思是-我想写尽可能少的代码,以便在其他项目中重新实现)。 我决
我想做一个使用 SSL/TLS 的协议(protocol)分析幸运的是我可以安装我自己的证书并且 DNS 部分不会成为问题。我的问题是我用什么来做到这一点。我考虑过使用 paros 但它会比它的值(v
我已经设置了一个 Nginx Ingress 来代理流量到我使用 kubeadm 设置的 Kubernetes 集群。这似乎运作良好。 在主机上(设置主节点的地方)我有许多其他服务正在运行,这些服务正
我有一个隐式 Intent 过滤器,它通过打开 Intent 来使用默认 Web 浏览器查看来处理 magnet: 方案链接。目前,这具有单击磁力链接将用户从浏览器抛出到我的 Activity 中的效
我在虚拟机 (libvirt/qemu) 中有一个 MacOS Catalina,主机是 Fedora 31。我想通过 iPhone SE 进行 iOS 开发。当我连接 iPhone 时,我在 dme
我正在通过 helm 在 minikube 中运行 nginx 入口 Controller ,通过查看 nginx 入口 Controller pod 的日志,我可以看到 Controller 中启用
关闭。 这个问题是 off-topic 。它目前不接受答案。 想改进这个问题吗? Update the question 所以它是 Stack Overflow 的 on-topic。 关闭 10
我需要将 SSL 连接直接发送到后端,而不是在我的 Traefik 上解密。后端需要接收https请求。 我尝试了 traefik.frontend.passTLSCert=true 选项,但是当我访
我想创建一个自定义控件来简化以下代码: First Name Last Name 我的想
这就是问题。 我有一个 https 请求。该请求作为 SSL/TLS 请求发送(不是来自具有代理设置的浏览器的 CONNECT ....)。 我需要用 C# 编写一个代理来阻止特定的 https://
如何在通过 SSL 的同时为多个域、多个后端设置 HAproxy? 图表中的示例以获得更好的解释: backend_domain_a dom
我正在尝试确保客户端和我的后端服务器之间的完整 e2e 连接。这就是我当前的基础架构的样子: Fargate 集群,我的后端应用程序放置在私有(private)子网中。 它们前面是内部网络负载均衡器,
默认情况下映射到 gt 命令,它选择下一个选项卡。我想传递给 Crtl+Tab 插件,它为标签做 MRU。 任何的想法? 最佳答案 由于您要传递,请使用: :map i 关于plugins - 默认
我是一名优秀的程序员,十分优秀!