我在 Rails 应用程序的
Answer
表中有一个 json 列; document
。我正在尝试编写一个范围,如果 document
为空,或者它仅包含两个特定键之一,则返回 true。
使用 ruby 我们可以做类似的事情:
Answer.document.except(:name, :secondary_name).empty?
但是我需要使用一个行为如下的范围:
a1 = Answer.document => {}
a2 = Answer.document => { name: "anything" }
a3 = Answer.document => { secondary_name: "anything" }
a4 = Answer.document => { other_important_key: "other_important_data" }
Answers.untouched => [a1, a2, a3]
最后,我使用以下内容反转了查询(以返回触摸的答案):
where("(document::jsonb - 'name' - 'secondary_name') <> '{}'::jsonb")