【发布时间】:2019-01-21 06:11:01
【问题描述】:
我有一个 Rails 5.2 应用程序,我在其中使用 form_with,它正在生成此 HTML:
<form id="post-0" class="" action="/posts.js" accept-charset="UTF-8" data-remote="true" method="post">
表单已成功提交到 PostController 的 create 操作。
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 ...,但遇到了同样的问题。
此时,我无法确定问题出在显示表单的 View 中,还是出在 Controller 的 create 操作中。控制器正在呈现create.js.erb,显示的URL是http://localhost:3000/posts.js,这似乎表明这是视图中的表单问题。
这个应用程序是 Rails 5.2。我不确定它是否相关,但我已经删除了 Webpacker 的资产管道,我 确实 安装了 rails-ujs (因为它在这些 link_to 链接中按预期显示确认对话框@ 987654334@
【问题讨论】:
-
从 format.js 中删除这个 { render :create, status: :created } 并重试。 @Turgs
-
同样的问题。没有变化@wasipeer
-
现在检查浏览器控制台是否有可能的错误
-
您是否尝试指定
action名称?像这样:format.js { render action: 'create', status: :created }通常你甚至不需要指定 aciton,它会默认搜索create.js.erb
标签: ruby-on-rails ajax