- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
这里是 ruby 初学者。我定义了以下范围,我有一种强烈的感觉,我可以用更干燥的方式来做到这一点。关于如何以较少重复的方式执行此操作有什么想法吗?
scope :end_during, ->(new_start_time, new_end_time) do
if (!new_start_time.nil?) && (!new_end_time.nil?)
where('end_time > ? AND end_time < ?', new_start_time, new_end_time)
else
return nil
end
end
scope :start_during, ->(new_start_time, new_end_time) do
if (!new_start_time.nil?) && (!new_end_time.nil?)
where('start_time > ? AND start_time < ?', new_start_time, new_end_time)
else
return nil
end
end
scope :happening_during, ->(new_start_time, new_end_time) do
if (!new_start_time.nil?) && (!new_end_time.nil?)
where('start_time > ? AND end_time < ?', new_start_time, new_end_time)
else
return nil
end
end
scope :enveloping, ->(new_start_time, new_end_time) do
if (!new_start_time.nil?) && (!new_end_time.nil?)
where('start_time < ? AND end_time > ?', new_start_time, new_end_time)
else
return nil
end
end
scope :identical, ->(new_start_time, new_end_time) do
if (!new_start_time.nil?) && (!new_end_time.nil?)
where('start_time = ? AND end_time = ?', new_start_time, new_end_time)
else
return nil
end
end
它们是这样使用的:
def overlaps
overlapping_bookings = [
subject.bookings.end_during(start_time, end_time),
subject.bookings.start_during(start_time, end_time),
subject.bookings.happening_during(start_time, end_time),
subject.bookings.enveloping(start_time, end_time),
subject.bookings.identical(start_time, end_time)
].flatten
overlapping_bookings.delete self
if overlapping_bookings.any?
errors.add(:base, 'Slot has already been booked')
end
end
最佳答案
您可以将通用的东西分解到另一个作用域中,然后从您的各个作用域中使用正确的参数调用它:
scope :time_constraint, ->(c1, f1, c2, f2) do
return nil unless f1 && f2
where "%s ? AND %s ?" % [c1, c2], f1, f2
end
scope :end_during, ->(start_time, end_time) { time_constraint "end_time >", start_time, "end_time <", end_time }
scope :start_during, ->(start_time, end_time) { time_constraint "start_time >", start_time, "start_time <", end_time }
scope :happening_during, ->(start_time, end_time) { time_constraint "start_time >", start_time, "end_time <", end_time }
scope :enveloping, ->(start_time, end_time) { time_constraint "start_time <", start_time, "end_time >", end_time }
scope :enveloping, ->(start_time, end_time) { time_constraint "start_time =", start_time, "end_time =", end_time }
它读起来也不错。
关于ruby-on-rails - 干掉范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20864906/
最近在造轮子,从 0 到 1 的那种,就差前台的界面了,大家可以耐心耐心耐心期待一下。其中需要设计一些数据库表,可以通过 Navicat 这种图形化管理工具直接开搞,也可以通过一些数据库设计工具来搞,
本文已经收录到Github仓库,该仓库包含 计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设
干燥路径“/A”和“/B”的解析参数的“Angular”方式是什么?在我的 $routeProvider 中,我为这些场景调用完全相同的解析函数,并且不知道避免在 AngularJS 框架中重复代码的
我确信有一种方法可以 DRY 代码。 changeColor() 所做的只是改变父组件的背景颜色。 import { Play } from "./play"; import { Hello } fr
我在 Node v6.3.0 中的 api 上运行以下代码,该 api 运行两个单独的 Promise,具体取决于 POST 请求中是否存在参数的条件。 if (paramExists) {
在我的 Ruby on Rails 项目中,我有一个邮件程序,它基本上为给定用户准备系统中发生的事情的每日摘要。在邮件 Controller 中,我根据一些通用模式(在特定日期内、不是由该用户创作
我是一名优秀的程序员,十分优秀!