我有一个使用活动模型序列化器构建的REST api的rails应用程序。
为了简单起见 - 请假设我有Post
序列化程序返回title
帖子,is_voted
返回true
或false
}值取决于当前登录的用户是否对此故事进行了投票。
attribute :is_voted do
voteable_ids = current_user.account.votes.where(voteable_type: 'Post').map(&:voteable_id)
voteable_ids.include? object.id
end
到目前为止,这一切都很有效但当我想通知javascript客户端有关Post
记录中的更改时,事情变得棘手。
让我们说标题已更改,我想发送一个关于该事件的动作事件:
ActionCable.server.broadcast 'updates_channel', {
event: 'posts.updated',
data: ActiveModelSerializers::SerializableResource.new(post).to_json
}
事情是 - 当发送这样的事件时,我不知道此时current_user
是什么,因为它是由后端触发的。或者基本上可以由其他用户触发。但如果我说得对,行动终端知道谁是current_user
,理论上,它可以被注入。
我在想 - 是否有可能将current_user注入某种可操作的中间件中的序列化程序?我可以使用identified_by :current_user
对用户电缆端点的用户进行身份验证,但我不知道如何在该场景中使用它。
另一个想法是发送关于帖子正在使用帖子ID更新的事件。后来,在JS方面,我可以使用常规REST api获取特定帖子并更新视图 - 但这听起来像是一个非常不理想的解决方案。