Tak mam ten przypadek użycia, w którym renderuję komunikat w kontrolerze (z ApplicationController.renderer), który jest następnie nadawany do kilku użytkowników. Transmisja odbywa się również w tym samym kontrolerze. Obie te akcje są wyzwalane, gdy wykonywana jest aktualizacja do określonego obiektu.Szyny 5, kabel akcji i current_user
Problem polega na tym, że muszę uzyskać dostęp do obiektu current_user wewnątrz renderowanego widoku i oczywiście nie mogę renderować go z bieżącym użytkownikiem jako zmienną lokalną, ponieważ wtedy wiadomość zostanie wysłana z użytkownikiem, który nadał wiadomość, a nie użytkownik końcowy, który zobaczy ten widok.
Po przeczytaniu kilku postów na blogu i dokumentów Railsowych ustawiam uwierzytelnianie za pomocą plików cookie, które będą obsługiwane przez kabel akcji.
Moje pytanie brzmi: w jaki sposób mogę uzyskać dostęp do wewnątrz renderowanego widoku obiektu (current_user) użytkownika końcowego?
Obecnie moja klasa połączeń wygląda następująco. Jak jednak renderować ten widok za pomocą tej zmiennej (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
Mój kontroler wygląda następująco:
(...)
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
(....)
Więc w zasadzie, mój ostatecznym celem jest, aby uzyskać dostęp do obiektu logged_user po wiadomość jest transmitowana do niego.
Dzięki
Mam dokładnie ten sam problem, czy ustalić to w międzyczasie ? – cseelus