是否有where使用ActiveRecord / ARel 否定整个表达式的简单方法?看起来where.not(),当给定参数散列时,分别对每个表达式求反,而不是使用单个SQL对整个事物求反NOT。
Thing.where.not(attribute1: [1,2], attribute2: [3,4], attribute3: [5,6])
select * from things where attribute1 NOT IN (1,2) AND attribute2 NOT IN (3,4) AND attribute3 NOT IN (5,6)
这不是我要尝试做的。我想用单个否定整个where子句NOT。
select * from things where NOT(attribute1 IN (1,2) AND attribute2 IN (3,4) AND attribute3 IN (5,6))
用布尔符号表示,Rails似乎更喜欢否定WHERE子句的每个组件,如下所示:
!(a) && !(b) && !(c)
但是我想否定整个表达式:
! [ (a) && (b) && (c) ]
使用DeMorgan定律,我可以将查询编写为!a || !b || !c,但这将导致代码相当长且难看(对于Rails 5和Rails来说or …
我什至不知道从哪里开始。对不起,如果这是重复的,但我什至不知道要搜索什么或这个特定问题被称为什么。
我的 RSpec 套件中的测试会随机地(并非经常发生)失败,并且会出现如下错误:
expected: 0.69
got: 0.69 (0.69e0)
(compared using ==)
Run Code Online (Sandbox Code Playgroud)
RSpec 代码正在比较来自两个不同模型的两个浮点数,当规范完成时,它们应该是相同的值。有没有办法在命令控制台中重现这个?我已经尝试了显而易见的东西(如下),但老实说我不知所措。如果我重新运行测试十几次,则无法重现该问题。
0.69 == 0.69e0 => true
0.69 == 0.69 => true
6.9e-1 == 0.69 => true
Run Code Online (Sandbox Code Playgroud) 我一直在与Rails 4和UJS进行斗争,并注意到Rails 4.1的行为(特别是rails-ujs)并不像我期望的那样.
当使用带有确认对话框的远程链接时,UJS驱动程序会在确认弹出窗口被批准之前发送XHR(使确认弹出窗口毫无意义).我本来希望Rails能够处理这些选项的组合,但是我必须编写自己的javascript来执行确认弹出并挂钩到"ajax:beforeSend"事件以防止请求过快触发.
这是我没有工作的东西(请求立即被激活,没有等待确认对话框返回true):
= link_to 'Ajax Button', app_path(resource), method: :delete,
remote: true, id: 'ajax_link', disable_with: 'Wait...',
confirm: 'Are you sure?'
Run Code Online (Sandbox Code Playgroud)
这就是我现在所做的工作:
= link_to 'Ajax Button', app_path(resource), method: :delete,
remote: true, id: 'ajax_link', disable_with: 'Wait...'
$ ->
$("a[data-remote]#ajax_link").on 'ajax:beforeSend', (xhr, settings) ->
return confirm("Are you sure?")
Run Code Online (Sandbox Code Playgroud)
只是我或不应该rails/jquery-ujs处理上述选项组合并等待确认弹出窗口?在过去,Rails 3和之前,远程链接/按钮在AJAX和远程请求时通常"正常工作",但Rails 4似乎使用AJAX需要更多的技巧,这是以前需要的.
还有其他人用Rails 4.1体验过这个吗?还有其他解决方案吗?