ActionCable: перенаправление на путь или действие из канала
Как я могу перенаправить на путь из n_channel.rb?
Я не могу использовать redirect_to
или же link_to
,
Какой самый лучший способ?
2 ответа
Ваш канал служит соединением, так что вы фактически делаете это из какой-то другой части вашего приложения.
Предполагая, что вы все правильно подключили, вы можете сделать следующее.
В вышеупомянутой другой части вашего приложения, когда пришло время для перенаправления:
def async_redirect(path)
NChannel.broadcast_to(
user, # or however you identify your subscriber
head: 302, # redirection code, just to make it clear what you're doing
path: path # you'll need to use url_helpers, so include them in your file
)
end
А потом на фронт
App.cable.subscriptions.create("NChannel", {
connected: () => {},
received: (data) => {
if (data.head == 302 && data.path) {
window.location.pathname = data.path; # Voila
}
}
});
Перенаправления не должны выполняться ни в одном файле модели (n_channel.rb кажется файлом модели).
Идеальный способ - вернуть ваше значение от модели к контроллеру. Тогда в зависимости от ваших бизнес-потребностей необходимо перенаправление с контроллера.