我正在使用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 []>
3条答案
按热度按时间gcuhipw91#
看起来gem会根据您的数据库创建jsonb或json列。
例如,对于postgres,可以这样做
cczfrluj2#
不管出于什么原因,我在一个我确信存在的通知上得到了一个空数组。
查询:
Notification.where('params @> ?', {comment: {id: testc.id}}.to_ json)
SQL语句:
"SELECT \"notifications\".* FROM \"notifications\" WHERE (params @> '{\"comment\":{\"id\":656}}')"
mzsu5hc03#
Noticed有一个内置的方式来查询您在参数中发送的对象。
如果将
has_noticed_notifications
添加到Post模型中,则应该能够调用@post.notifications_as_post
这是在注意到的自述文件在这里。我肯定来到这里,发现这个问题之前,我发现的细节自述文件!