尽管服务器回复是肯定的,但 Rails 呈现未显示在浏览器中



我在Rails中使用'render'时遇到了问题。我的控制器中有一个自定义操作"搜索",它应该呈现索引,如下所示。

def search
@date = params[:reserve_date]
@tables = Table.all
render 'index'
end

使用以下代码段在不同的视图中使用该操作:

<%= form_with url: search_tables_path do |f| %>
<%= f.date_field :reserve_date %>
<%= submit_tag "SEND" %>
<% end %>

按下"发送"按钮后,应呈现"索引"视图。服务器声明:

在布局/应用程序中呈现表/索引.html.erb(25.0毫秒(

在127ms 内完成 200 OK (浏览次数: 123.2ms |活动记录:3.0毫秒(

但是,浏览器中根本没有显示任何内容。它停留在上一页,没有变化。如果我尝试通过这样的链接访问索引视图:

然后索引视图正常显示,但当然我不会传递任何额外的信息。如何让它正确渲染?

HTML 中的"编辑表单"标记似乎已完成

<form action="/tables/search" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="4L/RNvCzlPX8PzDGk2LXcSiyrhzXVU3cwsLUmaQvq10y9HpESbH8CX+74n/UHxLJ5LUdiWYBdoaqCb2jFIYEgw==" />

这是我的routes.rb文件:

Rails.application.routes.draw do
devise_for :users
resources :tables do
collection do
post 'search'
end
end
resources :reservations
root 'home#index'
end

默认情况下,使用form_with生成的表单data-remote设置为true

如果data-remote设置为true则窗体将进行 AJAX 调用。因此,您的视图将呈现为该 AJAX 调用的响应。这就是为什么您不会收到任何错误的原因。

form_with中添加local: true

您可以从文档中了解有关form_with的更多信息。

更新:

正如@julien-lamarche在评论中建议的那样,在最新版本的Rails中,如果您使用的是Turbo,则可能还需要添加data: { turbo: false },这是最新版本Rails中的默认情况。

最新更新