- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 Event
模型,其中有一个用于 visibility_constraints
的 jsonb 列。一条记录通常包含四个数组included_users
、included_teams
、excluded_users
和excluded_teams
。 Event
具有公开或私有(private)的可见性。
还为四个数组创建了索引:
CREATE INDEX visibility_constraints_included_teams_on_events ON events USING GIN ((visibility_constraints->'included_teams'))
创建事件
Event.create(summary: 'Test', visibility_constraints: { included_users: [1, 2, 3], included_teams: [1, 2], excluded_users: [4, 5, 6], excluded_teams: [3, 4] })
=> #<Event:0x00007fc99d8f9670
id: 1,
summary: "Test",
starts_at: Sat, 11 May 2019 21:00:00 CEST +02:00,
ends_at: Sat, 11 May 2019 22:00:00 CEST +02:00,
visibility: "vis_private",
visibility_constraints: {"included_users"=>[1, 2, 3], "included_teams"=>[1, 2], "excluded_users"=>[4, 5, 6], "excluded_teams"=>[3, 4]}>
现在我尝试检索 current_user.id
在 included_users
中的事件……
Event.where("visibility_constraints -> 'included_users' ? :user_id", user_id: current_user.id.to_json)
(0.4ms) SELECT "events".* FROM "events" WHERE (visibility_constraints -> 'included_users' ? '1')
... 或者 current_user.team_ids
在 included_teams
中的位置。
Event.where("visibility_constraints -> 'included_teams' ? :team_ids", team_ids: current_user.team_ids.to_json)
(0.5ms) SELECT "events".* FROM "events" WHERE (visibility_constraints -> 'included_teams' ? '[3,5,1]')
这些查询总是不返回任何内容,所以我想知道我可能做错了什么。我忘记了什么地方吗?使用不同的运算符(好吧,我试过了,但没有任何变化)?
感谢您的帮助!
编辑
\d 公共(public)事件
+------------------------+-----------------------------+------------------------------------------------------+
| Column | Type | Modifiers |
|------------------------+-----------------------------+------------------------------------------------------|
| id | bigint | not null default nextval('events_id_seq'::regclass) |
| summary | character varying | |
| description | text | |
| starts_at | timestamp without time zone | |
| ends_at | timestamp without time zone | |
| allday | boolean | |
| created_at | timestamp without time zone | not null |
| updated_at | timestamp without time zone | not null |
| aasm_state | character varying | |
| visibility | visibility | default 'vis_private'::visibility |
| stage_id | bigint | |
| visibility_constraints | jsonb | not null default '{}'::jsonb |
+------------------------+-----------------------------+------------------------------------------------------+
Indexes:
"events_pkey" PRIMARY KEY, btree (id)
"index_events_on_stage_id" btree (stage_id)
"index_events_on_visibility_constraints" gin (visibility_constraints)
"visibility_constraints_included_teams_on_events" gin ((visibility_constraints -> 'included_teams'::text))
"visibility_constraints_included_users_on_events" gin ((visibility_constraints -> 'included_users'::text))
Foreign-key constraints:
"fk_rails_cb489a462e" FOREIGN KEY (stage_id) REFERENCES stages(id)
Referenced by:
TABLE "availabilities" CONSTRAINT "fk_rails_6d29de0e36" FOREIGN KEY (event_id) REFERENCES events(id)
TABLE "assignments" CONSTRAINT "fk_rails_6a5328b71e" FOREIGN KEY (event_id) REFERENCES events(id)
TABLE "resource_allocations" CONSTRAINT "fk_rails_2958f606d4" FOREIGN KEY (event_id) REFERENCES events(id)
Time: 0.048s
编辑 2
SELECT * FROM 事件
+------+-----------+----------------------------+----------------------------+-----------------------------------------------------------------------------------------------------------------+
| id | summary | created_at | updated_at | visibility_constraints |
|------+-----------+----------------------------+----------------------------+-----------------------------------------------------------------------------------------------------------------|
| 3 | event 3 | 2019-05-15 00:24:50.699237 | 2019-05-15 00:24:50.699237 | "{\"included_users\":[1,2,3],\"included_teams\":[1,2,3],\"excluded_users\":[4,5,6],\"excluded_teams\":[4,5,6]}" |
| 4 | event 4 | 2019-05-15 00:24:55.487215 | 2019-05-15 00:24:55.487215 | "{\"included_users\":[1,2,3],\"included_teams\":[1,2,3],\"excluded_users\":[4,5,6],\"excluded_teams\":[4,5,6]}" |
| 5 | event 5 | 2019-05-15 00:26:15.872433 | 2019-05-15 00:26:15.872433 | "{\"included_users\":[2,3],\"included_teams\":[],\"excluded_users\":[],\"excluded_teams\":[]}" |
+------+-----------+----------------------------+----------------------------+-----------------------------------------------------------------------------------------------------------------+
最佳答案
将 user_id 绑定(bind)到关键字参数对您的情况没有多大帮助。您可以做的是将其包装在 []
中并将其转换为 JSON。
使用“包含”运算符,您可以检查左边的 JSON 值是否在顶层包含正确的 JSON 路径/值条目?:
Event.where(
'visibility_constraints @> ?', { included_users: [current_user.id] }.to_json
)
生成:
SELECT "events".*
FROM "events"
WHERE (visibility_constraints @> '{"included_users":[<current_user_id_as_integer>]}')
关于ruby-on-rails - 应该使用什么 postgres 运算符来比较数组/整数与数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093601/
Or 运算符 对两个表达式进行逻辑“或”运算。 result = expression1 Or expression2 参数 result 任意数值变量。 expression1 任意
Not 运算符 对表达式执行逻辑非运算。 result = Not expression 参数 result 任意数值变量。 expression 任意表达式。 说明 下表显示如何
Is 运算符 比较两个对象引用变量。 result = object1 Is object2 参数 result 任意数值变量。 object1 任意对象名。 object2 任意
\ 运算符 两个数相除并返回以整数形式表示的结果。 result = number1\number2 参数 result 任意数值变量。 number1 任意数值表达式。 numbe
And 运算符 对两个表达式进行逻辑“与”运算。 result = expression1 And expression2 参数 result 任意数值变量。 expression1
运算符(+) 计算两个数之和。 result = expression1 + expression2 参数 result 任意数值变量。 expression1 任意表达式。 exp
我对此感到困惑snippet : var n1 = 5-"4"; var n2 = 5+"4"; alert(n1); alert(n2); 我知道 n1 是 1。那是因为减号运算符会将字符串“4”转
我想我会得到 12,而不是 7。 w++,那么w就是4,也就是100,而w++, w 将是 8,1000;所以 w++|z++ 将是 100|1000 = 1100 将是 12。 我怎么了? int
Xor 运算符 对两个表达式进行逻辑“异或”运算。 result = expression1 Xor expression2 参数 result 任意数值变量。 expression1
Mod 运算符 两个数值相除并返回其余数。 result = number1 Mod number2 参数 result 任意数值变量。 number1 任意数值表达式。 numbe
Imp 运算符 对两个表达式进行逻辑蕴涵运算。 result = expression1 Imp expression2 参数 result 任意数值变量。 expression1 任
Eqv 运算符 执行两个表达式的逻辑等价运算。 result = expression1 Eqv expression2 参数 result 任意数值变量。 expression1 任
我有一个运算符重载的简单数学 vector 类。我想为我的运算符(operator)获取一些计时结果。我可以通过计时以下代码轻松计时我的 +=、-=、*= 和/=: Vector sum; for(s
我是用户定义比较运算符的新手。我正在读一本书,其中提到了以下示例: struct P { int x, y; bool operator、运算符<等),我们
在 SQL 的维基百科页面上,有一些关于 SQL 中 bool 逻辑的真值表。 [1] 维基百科页面似乎来源于 SQL:2003 标准。 等号运算符 (=) 的真值表与 SQL:2003 草案中的 I
我遇到了一个奇怪的 C++ 运算符。 http://www.terralib.org/html/v410/classoracle_1_1occi_1_1_number.html#a0f2780081f
我正在阅读关于 SO 和 answers 中的一个问题,它被提到为: If no unambiguous matching deallocation function can be found, pr
我偶然发现了这个解决方案,但我无法理解其中到底发生了什么。谁能解释一下! 据我了解,它试图通过计算一半的单元格然后将其加倍来计算 a*b 网格中的单元格数量。但是我无法理解递归调用。 请不要建议其他解
Go的基本类型 布尔类型bool 长度:1字节 取值:布尔类型的取值只能是true或者false,不能用数字来表示 整型 通用整型 int / uint(有符号 / 无符号,下面也类似) 长度:根据运
在本教程中,您将学习JavaScript中可用的不同运算符,以及在示例的帮助下如何使用它们。 什么是运算符? 在JavaScript中,运算符是一种特殊符号,用于对运算数(值和变量)执行操作。例如,
我是一名优秀的程序员,十分优秀!