我已经阅读了很多有关Rails如何处理remote: true
的帖子,但是我仍然不明白为什么会这样。我的表单之一是远程表单,如下所示:
<%= form_with model: @transfer, scope: :transfer, url: transfers_path, method: 'post', remote: true do |f| %>
在我的create
动作中,我只有这个:
def create
@transfer = @account.transfers.build(transfer_params)
respond_to do |format|
if @transfer.valid?
format.html { redirect_to pending_transactions_path }
else
flash.now[:error] = "An error occurred"
format.js
end
end
end
在保存create.js.erb
时出错时,严格使用@transfer
模板进行处理,我也尝试不使用代码将其清空。出于某种原因,当我提交此表单时,确实将我重定向到pending_transactions_path
。
但是,在我的代码的另一部分中,我有一个像这样的ajax请求:
$.ajax({
method: "GET",
url: "/handle_timeout"
});
我的控制器动作如下:
def handle_timeout
respond_to do |format|
format.html { redirect_to pending_transactions_path }
end
end
由于某种原因,它没有重定向。在我的Rails日志中,我可以看到它正在重定向:
10:19:18 web.1 | Redirected to http://localhost:3000/transactions/pending
10:19:18 web.1 | Completed 302 Found in 67ms (ActiveRecord: 50.6ms)
10:19:18 web.1 | Started GET "/transactions/pending" for ::1 at 2019-05-31 10:19:18 -0700
10:19:18 web.1 | Processing by TransactionsController#pending_transfers as */*
我必须遵循另一个SO答案才能将其重定向。链接到该答案:https://stackoverflow.com/a/17689223/3504731
我认为remote: true
与发出$.ajax
请求相同吗?为什么在我提交第一个表单时页面会重定向,而在第二个ajax请求运行时却不重定向?与ajax请求相比,Rails的remote: true
在幕后还能发挥更多魔力吗?
我正在运行Rails 5.2.1。任何对此的见解将不胜感激。谢谢您的阅读!