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 кажется файлом модели).

Идеальный способ - вернуть ваше значение от модели к контроллеру. Тогда в зависимости от ваших бизнес-потребностей необходимо перенаправление с контроллера.

Другие вопросы по тегам