У меня есть приложение Rails 5.2, где я использую form_with
, который генерирует этот HTML:
<form id="post-0" class="" action="/posts.js" accept-charset="UTF-8" data-remote="true" method="post">
Форма успешно отправляется в действие create
PostController.
def create
@post = current_user.account.posts.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to posts_path, notice: 'Post added.' }
format.js { render :create, status: :created }
else
format.html { render :index }
format.js { render :create, status: :unprocessable_entity }
end
end
end
Это равно , тогда рендеринг представления JS:
app / views / posts / create.js.erb
alert('created');
Однаков моем браузере я буквально перенаправлен на http://localhost:3000/posts.js
, где он показывает код JavaScript.Это означает, что отправка формы не , кажется, происходит в фоновом режиме.
Я бы ожидал остаться на той странице, на которой была форма, с появлением предупреждения Javascript с надписью"создал".
Есть ли что-то глупое, что я пропустил?Мне кажется, это что-то с form_with
, что я не правильно делаю.
Я пытался заменить его на form_for @post, remote: true, format: :js do ...
, но с той же проблемой.
На данный момент,Я не могу сказать, есть ли проблема в представлении, которое показывает форму, или в действии контроллера create
.Контроллер - это рендеринг create.js.erb
, а показанный URL-адрес - http://localhost:3000/posts.js
, что, по-видимому, указывает на проблему формы в представлении.
Это приложение - Rails 5.2.Я не уверен, что это актуально, но я удалил конвейер активов для Webpacker, у меня do установлен rails-ujs
(так как он показывает диалог подтверждения в этих link_to
ссылках, как и ожидалось <%= link_to('Destroy', user, method: :delete, data: { confirm: 'Are you sure?' }) %>