所以我有这个用例,我在一个控制器(带有ApplicationController.renderer)中呈现一条消息,然后广播给几个用户.广播也在同一控制器内执行.执行对某个对象的更新时,将触发这两个操作.
问题是,我需要访问该渲染视图中的current_user对象,当然,我无法将当前用户渲染为局部变量,因为这样的消息将与广播消息的用户一起发送,而不是将看到该视图的最终用户.
因此,在阅读了几篇博客文章和Rails文档之后,我设置了使用cookie的身份验证,以便通过操作电缆支持.
我的问题是:如何在渲染视图中访问最终用户的对象(current_user)?
目前,我的连接类看起来像这样.但是,如何使用此变量(logged_user)呈现该视图?
module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :logged_user def connect self.logged_user = User.find_by(id: cookies.signed[:user_id]) end end end
我的控制器看起来像这样:
(...) def update if @poll.update(poll_params) broadcast_message(render_message(@poll), @poll.id, @poll.room.id) (...) end end def broadcast_message(poll = {}, poll_id, room_id) ActionCable.server.broadcast 'room_channel', body: poll, id: poll_id, room_id: room_id end def render_message(poll). if poll.show_at.to_time <= Time.now ApplicationController.renderer.render( partial: 'rooms/individual_student_view_poll', locals: { poll: poll, room: @room }) end end (....)
所以基本上,我的最终目标是在广播消息后访问logged_user对象.
谢谢