Как заставить redirect_to работать в удаленной форме? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть форма, и моя цель -

  • , если отправка формы прошла успешно ... перенаправить на домашнюю страницу
  • , если отправка формы не удалась .... показать сообщение об ошибке в bootstrap модальном

, если я использовал обычную форму (не удаленную)

    <%= form_with model: @car, id: "car-form", local: true do |f| %>

, тогда работает redirect_to, но код для модального bootstrap, который я написал в action. js .erb не выполняется

, если я использовал удаленную форму

    <%= form_with model: @car, id: "car-form", remote: true do |f| %>

, тогда redirect_to перестает работать, но код для bootstrap модальный, который я написал в действии. js .erb выполняет

Мне нужны оба ... Есть ли способ для этого?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Как писал @Sri выше, вы можете отличить thet на format или просто использовать flash Rails предоставляет метод для отображения flash mathod в том же запросе на flash.now

, поэтому форма local: true и в контроллере:

if @foo.save
  render 'something_new'
else
  flash.now[:error] @foo.errors.map(&:message).join(', ')
  render 'edit' // render the same view with form
end

(или выполните аналогичные действия, чтобы получить правильные сообщения об ошибках или собственное сообщение)

далее вы можете отобразить его поверх формы в качестве модального:

<% if flash.any? %>
  <div class='modal'>
  ...
    <% flash.each do |key, value| %>
      <div class="flash <%= key %>"><%= value %></div>
    <% end %>
  </div>
<% end %>

также делает модальные видимыми при запуске

$(".modal").modal('show')
0 голосов
/ 23 апреля 2020

Следует отметить несколько вещей:

1) form_with - это remote: true по умолчанию. Когда вы передаете local, тогда это не ajax форма. Посмотрите на эту форму_ со ссылкой

2) Если вы хотите нажать action.js.erb, то в контроллере вы вызываете format.js

В одну сторону:

def action_name
  @foo = Foo.bar

  respond_to do |format|
    if @foo.errors.any?
      format.js
    else
      format.html { redirect_to :index }
    end
  end
end

Другой способ:

Your controller action
----------------------
def action_name
  @foo = Foo.bar

  respond_to do |format|
    format.js
  end
end


action.js.erb
----------------

<% if @foo.errors.count > 0 %>
  your modal with errors in it
<% else %>
  window.location.href='<%= url_for(:action => :index) %>'
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...