我在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="✓" /><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中的默认情况。