gpt4 book ai didi

ruby-on-rails - Rails 5,action cable 和 current_user

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:41 24 4
gpt4 key购买 nike

所以我有这个用例,我在 Controller (使用 ApplicationController.renderer)中呈现一条消息,然后将其广播给几个用户。广播也在同一 Controller 内部执行。当对某个对象执行更新时,这两个操作都会被触发。

问题是,我需要访问渲染 View 中的 current_user 对象,当然,我不能将当前用户渲染为局部变量,因为这样消息将与广播消息的用户一起发送而不是将看到该 View 的最终用户。

因此,在阅读了几篇博文和 Rails 文档后,我将使用 cookie 的身份验证设置为 action cable 支持。

我的问题是:如何在呈现的 View 中访问最终用户的对象 (current_user)?

目前,我的连接类如下所示。但是,如何使用此变量 (logged_user) 呈现该 View ?

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

我的 Controller 看起来像这样:

(...)

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 对象。

谢谢

最佳答案

像这样:

ApplicationController.renderer.render(
partial: 'rooms/individual_student_view_poll',
locals: {
poll: poll,
room: @room
},
assigns: {
logged_user: logged_user
}
)

将像这样在您的模板中可用:

<% if defined? @logged_user %>
...
<% end %>

关于ruby-on-rails - Rails 5,action cable 和 current_user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41620521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com