假设我们有一个简单的搜索表单,它提交一个用于搜索/过滤的 GET 请求:
<%= form_with(scope: :search, url: url_for, local: false, method: :get) do |f| %>
<%= f.text_field :title %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
当我们使用form_with(或旧的form_for)ActiveRecord 对象时,所有字段都会自动预先填充 AR 对象属性的当前值。
但在上面的示例中,如果我们仅使用范围(在本例中为search),则当我们使用如下 URL 打开页面时,不会发生这种情况:
http://localhost:3000/blog?search%5title%5D=test
即使 URL 很难为我们填充 Rails params[:search],{title: 'test'}它仍然需要手动传递每个字段的值,如下所示:
<%= f.text_field :title, value: params.dig(:search, :title) %>
随着搜索表单的增长,这变得非常乏味且容易出错,并且这似乎是一个常见的要求,我无法相信没有一种更“轨道的方式”可以在不诉诸表单对象设计模式之类的情况下做到这一点。
是否有任何自动方法可以预先填充这些输入,而不必从参数手动传递值?
我认为您可以使用控制器操作中的参数值创建一个新的搜索对象。然后 form_with/form_for 应该预先填写输入字段。也许是这样的:
@search = Search.new(params[:search])
希望有帮助。
| 归档时间: |
|
| 查看次数: |
919 次 |
| 最近记录: |