根据jsonb嵌套数据字段查找模型
Find model based on jsonb nested data field
我在 Rails 和 Postgres 9.5 上使用 Ruby。
在数据库中我有一个名为 events
的 table。
我想根据数据字段中的特定值查找所有事件。
events.data
有以下可能的 json 值:
{ 'transition' => { 'from' => 'bacon', 'to' => 'ham' } }
我如何构建一个查询来查找具有数据 => 转换 => 来自 bacon
的事件?
假设你的模型叫做Event
,你可以这样做:
Event.where("data -> 'transition' ->> ? = ?", 'from', 'bacon')
Here is jsonb operators reference.
此查询将 return data.transition.from
等于 bacon
的所有事件。
要 DRY 您的查询,您可以将其添加到存储库中,例如:
# app/repositories/event_repository.rb
module EventRepository
extend ActiveSupport::Concern
included do
scope :where_transition, ->(field, value) { where("data -> 'transition' ->> ? = ?", field, value) }
end
end
之后将其包含在您的模型中:
include EventRepository
那么你可以这样使用它:
Event.where_transition('from', 'bacon')
Event.where_transition('to', 'ham')
我在 Rails 和 Postgres 9.5 上使用 Ruby。
在数据库中我有一个名为 events
的 table。
我想根据数据字段中的特定值查找所有事件。
events.data
有以下可能的 json 值:
{ 'transition' => { 'from' => 'bacon', 'to' => 'ham' } }
我如何构建一个查询来查找具有数据 => 转换 => 来自 bacon
的事件?
假设你的模型叫做Event
,你可以这样做:
Event.where("data -> 'transition' ->> ? = ?", 'from', 'bacon')
Here is jsonb operators reference.
此查询将 return data.transition.from
等于 bacon
的所有事件。
要 DRY 您的查询,您可以将其添加到存储库中,例如:
# app/repositories/event_repository.rb
module EventRepository
extend ActiveSupport::Concern
included do
scope :where_transition, ->(field, value) { where("data -> 'transition' ->> ? = ?", field, value) }
end
end
之后将其包含在您的模型中:
include EventRepository
那么你可以这样使用它:
Event.where_transition('from', 'bacon')
Event.where_transition('to', 'ham')