ruby-on-rails 如何查询Noticed gem json字段

vbopmzt1  于 2022-11-19  发布在  Ruby
关注(0)|答案(3)|浏览(154)

我正在使用Noticed gem作为通知,并尝试查询与帖子相关的通知。通知将帖子作为对象存储在params中。

#<Notification id: 10, params: {:post=>#<Post id: 3}>

我可以瞄准

notification.params[:post][:id] 
=> 3

我试图完成的事情是这样的:

Notifications.where(params[:post][:id] => 3)

有没有办法做到这一点,或者我的方法应该不同?

编辑日期:

以下是数据库中的通知示例:

#<Notification id: 10, recipient_type: "User", recipient_id: 8, type: "MessageNotification", params: {:user=>#<User id: 3, email: "test2@test2.com", created_at: "2021-01-06 23:34:46", updated_at: "2021-04-15 17:47:54", admin: true>, :conversation=>#<Mailboxer::Conversation id: 6, subject: "Hello", created_at: "2021-05-14 00:14:41", updated_at: "2021-05-14 00:26:06">}, read_at: nil, created_at: "2021-05-14 00:26:06", updated_at: "2021-05-14 17:11:50">

squema.rb

t.jsonb "params"

@Joel_Blum建议的查询和slq调用:

>> current_user.notifications.where('params @> ?', {conversation: {id: 6}}.to_json).to_sql
=> "SELECT \"notifications\".* FROM \"notifications\" WHERE \"notifications\".\"recipient_id\" = 8 AND \"notifications\".\"recipient_type\" = 'User' AND (params @> '{\"conversation\":{\"id\":6}}')"

Returns => #<ActiveRecord::AssociationRelation []>
gcuhipw9

gcuhipw91#

看起来gem会根据您的数据库创建jsonb或json列。
例如,对于postgres,可以这样做

Notification.where('params @> ?', {post: {id: 3}}.to_json)
cczfrluj

cczfrluj2#

不管出于什么原因,我在一个我确信存在的通知上得到了一个空数组。
查询:Notification.where('params @> ?', {comment: {id: testc.id}}.to_ json)
SQL语句:"SELECT \"notifications\".* FROM \"notifications\" WHERE (params @> '{\"comment\":{\"id\":656}}')"

mzsu5hc0

mzsu5hc03#

Noticed有一个内置的方式来查询您在参数中发送的对象。
如果将has_noticed_notifications添加到Post模型中,则应该能够调用@post.notifications_as_post
这是在注意到的自述文件在这里。我肯定来到这里,发现这个问题之前,我发现的细节自述文件!

相关问题