验证重叠 Gem 多个范围相互覆盖

2023-12-27

我正在使用 Validates_Overlap Gem,可以在这里找到:https://github.com/robinbortlik/validates_overlap https://github.com/robinbortlik/validates_overlap

本质是我有两个房间可以预订。我希望当同一房间已在同一房间中确认预订时进行验证。当预订了其他房间,或者预订了同一房间但尚未确认时,它不应该给我带来错误。

到目前为止我的代码如下

validates :start_time, :end_time, 
    :overlap => {
        :exclude_edges => ["starts_at", "ends_at"],
        :scope => { "bookings.studio_id" => proc {|booking| booking.studio_id}} &&  { "bookings.is_confirmed" => proc {|booking| booking.is_confirmed == true}}
        }, on: :update

这会从我的服务器返回以下内容:

Booking Exists (0.4ms)  SELECT  1 AS one FROM "bookings"  WHERE ((bookings.end_time IS NULL OR bookings.end_time >= '2014-10-23 20:00:00.000000') AND (bookings.start_time IS NULL OR bookings.start_time <= '2014-10-24 03:00:00.000000') AND bookings.id != 9 AND bookings.is_confirmed  = 't') LIMIT 1

还有另外两个预订(使用此 studio_id),但均未得到确认。是什么赋予了?

以下是所有带有 :studio_id => 2 的预订

[#<Booking id: 1, studio_id: 2, engineer_id: 5, is_confirmed: false, title: "", allDay: false, created_at: "2014-10-23 19:59:01", updated_at: "2014-10-23 19:59:01", start_time: "2014-10-23 19:00:00", end_time: "2014-10-23 21:00:00", user_id: nil, booker: "Client", client_id: 3>,
 #<Booking id: 8, studio_id: 2, engineer_id: 1, is_confirmed: false, title: "", allDay: false, created_at: "2014-10-24 03:07:34", updated_at: "2014-10-24 03:07:34", start_time: "2014-10-23 19:00:00", end_time: "2014-10-23 22:00:00", user_id: nil, booker: "Pat Sullivan", client_id: nil>,
 #<Booking id: 9, studio_id: 2, engineer_id: 2, is_confirmed: false, title: "", allDay: false, created_at: "2014-10-24 03:26:17", updated_at: "2014-10-24 03:26:17", start_time: "2014-10-23 20:00:00", end_time: "2014-10-24 03:00:00", user_id: nil, booker: "Client", client_id: 4>]

Update我注意到 studio_id 没有被范围行中的 && 注意到。我怎样才能让范围同时注册?我可以在范围线内完成它还是应该创建一个方法?

我也尝试过更简单的

    validates :start_time, :end_time, 
    :overlap => {
        :exclude_edges => ["starts_at", "ends_at"],
        :scope => "is_confirmed" && "studio_id"
        }, on: :update

这做了同样的事情——只使用后面的“studio_id”


我知道,选项的名称令人困惑,对此我感到抱歉。

我建议您实现名为 :confirmed 的命名范围并将其作为 :query_option 参数传递。

我想,它应该是这样的:

class Booking < ActiveRecord::Base
  scope :confirmed_scope, -> {confirmed: true}  
  validates :start_time, :end_time, :overlap => {
    :exclude_edges => ["starts_at", "ends_at"],
    :scope => "studio_id",
    :query_options => {:confirmed_scope => nil}
    }, on: :update
end

顺便说一句...如果您使用 Rails 4.1,请小心,有一个变化https://github.com/robinbortlik/validates_overlap#rails-41-update https://github.com/robinbortlik/validates_overlap#rails-41-update

简短说明:您作为 :scope 选项传递的内容,其行为类似于属性。但你可以通过 :query_options 扩展它。查询选项内部的内容将在查询链中调用。所以内部会这样调用:

Booking.confirmed_scope.where("starts_at > 18-02-2014 AND ends_at < 20-02-2014 AND studio_id = 1")

现在更清楚了吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证重叠 Gem 多个范围相互覆盖 的相关文章

随机推荐

  • 如何获取动态查询结果的行数?

    我创建了一个动态查询 一切运行良好 我使用以下命令执行查询 EXEC sp executesql SQLQuery 其中 SQLQuery 是一种动态查询 我唯一的问题是如何返回执行此查询后存在的行数 我希望我的问题很清楚 提前致谢 您可以
  • 通过指向错误函数类型的指针调用函数(未知)

    我有一个动态链接到库的程序 该程序将函数指针传递给该库以执行 但 ubsan 未定义行为清理程序 指定该指针位于不正确的函数类型上 而这种情况只会发生 如果回调函数有一个类作为参数 如果回调函数有一个类作为参数 但仅向前声明 如果我指定编译
  • 在 jQuery UI 可调整大小组件中嵌入 Ace 编辑器

    我正在尝试通过将 ace 编辑器嵌入到可调整大小的组件中来调整其大小 我一直在尝试使用 jQuery UI 可调整大小组件 但无法让 ace 编辑器出现在可调整大小组件内 Code
  • Intellij:不是有效的项目 ID:

    I updated Intellij Idea to 2018 2 6 现在我无法使用 Play Configuration 启动我的 Play Project 它给了我这个 error Not a valid project ID myP
  • Jackson 没有序列化字段

    我有以下课程 public class Entity private String id private String name private List
  • 如何在 Windows 工作站/服务器上将 Git 设置为 Web 项目 (ASP) 的 VCS?

    我们团队中有 5 个人从事一些 ASP 项目 局域网中有一台本地服务器运行Windows Server 我们不经常使用它 只是将其作为备份存储 我们还有一台运行 Windows Server 的远程服务器 我们在那里发布最终产品并使用远程桌
  • JavaScript .CSV 到数组

    我有一个 CSV 文件 它有 4 列和数千行 我想要 4 个数组 每一列一个 我最近开始学习 JavaScript 有人可以告诉我该怎么做吗 在 Python 中 这非常简单 只需几行代码 然而 当我看到JS中的相关帖子后 我感到非常困惑
  • 我如何在 JPQL 中内部加入子查询

    我需要一个用于 MySQL 查询的 JPQL SELECT FROM table1 t1 INNER JOIN table2 t2 ON t1 id t2 table1 id INNER JOIN SELECT FROM table1 t3
  • 在android聊天气泡中插入imageview可调

    我想在我的 Android 聊天中执行此操作 但我无法让我的照片适合我的泡泡 我有一个LinearLayout 他的背景是一个气泡9patch 在其中 我有一个图像视图 在此处插入图像但不是如何使其适合我们在屏幕上看到的背景 这就是我的形象
  • 我应该用通用类定义为我的文件命名什么?

    我正在编写几个具有泛型类型参数的类 但我需要重载这些类 因为在不同的场景中我需要不同数量的参数 基本上 我有 public class MyGenericClass
  • 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

    我正在使用Scanner方法nextInt and nextLine 用于读取输入 它看起来像这样 System out println Enter numerical value int option option input nextI
  • 未找到 Docker 映像入口点脚本

    我有一个Dockerfile like FROM frolvlad alpine oraclejdk8 slim ADD build libs zuul jar app jar ADD src main script startup sh
  • xarray.DataArray.roll 方法创建不需要的工件

    最近 我一直在使用 xarray 加载一堆 NetCDF 文件并使用 cartopy 绘制它们 今天我注意到一件有趣的事情 对于我感兴趣的区域 我需要选择 20W 到 40E 经度 根据设计 我无法用一种方法做到这一点KEdiff mean
  • NSTimer 和更新 UI

    我一直在努力让我的游戏能够正常运行NSTimer 我发现很多人都遇到了与我类似的问题 我只需要对某些事情进行一些澄清 基本上我有一个NSTimer在主线程上运行 该线程正在更新代表时间的图像 但我也有一个地图视图 当用户平移地图时 计时器被
  • 将嵌套的 Pojo 对象作为单独的对象存储在数据库中

    我使用 jackson 将 json 字符串映射到我的 HTModel 类 这基本上是一个简单的 Pojo class HTModel public class Post extends HTModel public String id p
  • Android 8:不允许明文 HTTP 流量

    我收到 Android 8 用户的报告称我的应用程序 使用后端提要 不显示内容 经过调查 我发现 Android 8 上发生以下异常 08 29 12 03 11 246 11285 11285 E 12 03 11 245 main Ex
  • Django 多对多关系添加不起作用

    我正在将 Django 的 ManyToManyField 用于我的模型之一 class Requirement models Model name models CharField max length 200 class Course
  • 找到所有套装的组合 - 套装封面?

    有人可以分享一个java程序吗 它可以执行以下操作 如果给出以下集合作为输入 a 1 2 3 8 9 10 b 1 2 3 4 5 c 4 5 7 d 5 6 7 e 6 7 8 9 10 and U 1 2 3 4 5 6 7 8 9 1
  • 如何使用 gson 在 json 现有结构中再插入一项?

    下面的代码正确生成 json 文件的第一个结构 gson new GsonBuilder setPrettyPrinting create AudDetHeader AudDetHeader new AudDetHeader ArrayLi
  • 验证重叠 Gem 多个范围相互覆盖

    我正在使用 Validates Overlap Gem 可以在这里找到 https github com robinbortlik validates overlap https github com robinbortlik valida