rails: redirect_to рендеринг, но не перезагрузка новой страницы - PullRequest
0 голосов
/ 24 апреля 2019

Мне бы хотелось, чтобы мое приложение отображало список всех связанных объектов при его обновлении, поэтому я бы хотел загрузить действие index после завершения обновления.

Я попытался отформатировать блок, удалив форматирование, рендер и redirect_to. Все они просто остаются на странице редактирования

Обновить действие:

  def update
    respond_to do |format|
      if @business_category.update_attributes(business_category_params)
        format.html {redirect_to admin_business_categories_path}
        return
      end
    end
  end

редактировать вид:

<div class="container">
  <div class="row">
    <div class="col-xs-12">
      <%= link_to 'Back to categories', admin_business_categories_path %>
    </div><!-- .col -->
    <%= simple_form_for(@business_category, url: admin_business_category_path(@business_category), remote: true, html: { class: '' }) do |f| %>
      <%= render 'form', f: f %>
    <% end %>
  </div><!-- .row -->
</div><!-- .container -->

_form частично:

<div class="col-xs-12 col-sm-10 col-md-10">
  <%= f.input :name, label: 'Category Name' %>
</div>

<div class="col-xs-12 col-sm-2 col-md-2">
  <div class="btn-group-vertical" role="group" aria-label="...">
    <button id="businessCategoryCancelButton" class="btn btn-warning">CANCEL</button>
    <%= f.submit 'SAVE', class: 'btn btn-success' %>
    <br>
  </div>
</div>

на redirect_to в консоли появляется сообщение:

No template found for Admin::BusinessCategoriesController#update, rendering head :no_content
Completed 204 No Content in 1505ms (ActiveRecord: 1.0ms)

Я не знаю, почему он ищет шаблон обновления или почему он не перенаправляет на действие индекса

Я пытаюсь понять, как работает формат, и если / почему он будет конфликтовать с перенаправлением. Любой совет будет полезен

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Поскольку вы выполняете вызов AJAX (remote: true в вашей форме).

У вас есть следующие опции:

  • Добавить format.js к контроллеру
  • Удалите remote: true из определения формы и respond_to из контроллера:
def update
  if @business_category.update_attributes(business_category_params)
    redirect_to admin_business_categories_path
  else
    render :edit
  end
end
0 голосов
/ 24 апреля 2019

simple_form_for(@business_category, url: admin_business_category_path(@business_category), remote: true, html: { class: '' })

В вашей форме вы упомянули remote: true.Он обрабатывает ваш запрос как JS запрос.В вашем контроллере вы упомянули format.html {redirect_to admin_business_categories_path}, но он обработает его как format.js и ищет файл update.js.erb для обработки ответа, потому что ваш формат запроса - «JS» вместо «HTML», следовательно, он показывает ошибку,

Вы должны будете отправить запрос в виде запроса HTML.

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

Вам нужно будет сделать 2 изменения.

  1. Удалить удаленный: true из формы, поскольку он не соответствует вашему требованию
  2. Добавьте строку format.html { render :edit }, в противном случае update_attributes()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...