@aaltqna

Как обновить список на странице после создание новой записи?

Допустим, на странице есть список из записей @articles и кнопка "Создать новый". После создания в этот список должна добавиться новая запись.

Rails Guides в CRUD предлагает редирект на саму запись:
def create
    @article = Article.new(title: "...", body: "...")

    if @article.save
      redirect_to @article
    else
      render :new, status: :unprocessable_entity
    end
end


Но мне просто нужно обновить текущий список. Поэтому нашел следующее:
def create
    @article = Article.new(article_params)

    respond_to do |format|
      if @article.save
        format.html { redirect_to articles_url }
      else
        format.html { render :new, status: :unprocessable_entity }
      end
    end
end


Т.е. редирект на страницу, на которой я уже нахожусь, по сути - перезагрузка страницы. Я подумал, что с таким подходом производится какое-нибудь сравнение контента страницы до обновления и после и новая страница перезагружается частично. Однако, нет, полностью вся страница перезагружается так, как будто открывается впервые.

Теперь вопрос: на моей странице есть огромная таблица, инициализация которой может занимать секунд 20-30. Если я буду следовать такому красивому коду, то пользователь будет страдать после каждого "создания чего-либо" на странице. Это так и должно быть что ли?

Получается, что единственный способ не перезагружать всю страницу - это только remote запросы и js колбэки, типа такого - https://stackoverflow.com/questions/30008003/appen.... Или есть что-то еще? Кому вообще может понадобится полное обновление страницы и зачем?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
@tin_vsl
Senior Developer | Solution Architect
Один из вариантов для rails - использовать Turbo Streams
https://turbo.hotwired.dev/handbook/streams

Еще одно решение для rails - CableReady
https://cableready.stimulusreflex.com/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы