所以我有这个用例,我在一个控制器(带有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对象。
谢谢
答案 0 :(得分:0)
这样的事情:
ApplicationController.renderer.render(
partial: 'rooms/individual_student_view_poll',
locals: {
poll: poll,
room: @room
},
assigns: {
logged_user: logged_user
}
)
将在您的模板中提供,如下所示:
<% if defined? @logged_user %>
...
<% end %>