ruby-on-rails - 在 Rails 5 中的 form_with 中保留页面重新加载时的复选框值
问题描述
我有一个使用创建的表单form_with
。我需要的是在页面重新加载后保留使用该表单提交的值。我能够保存 的值text_field
但不能保存 的值check_box
。我应该在我的代码中进行哪些更改才能实现相同的效果?
html.erb
<%= form_with url: search_path,
id: :search_by_filter,
method: :get, local: true do |f| %>
<div>
<p><strong>Search by Name</strong></p>
<%= f.label 'Name' %>
<%= f.text_field :name, value: params[:name] %>
</div>
<br>
<div>
<%= label_tag do %>
<%= f.check_box :only_students, checked: params[:only_students] %>
Show only students
<% end %>
</div>
<br/>
<div class="submit_button">
<%= f.submit :Search %>
</div>
<% end %>
控制器.rb
def get_desired_people(params)
people = Person.includes(:country, :state, :university).order(id: :desc)
people = people.where(is_student: params[:only_students]) if params[:only_students]
people = people.where(name: params[:name]) if params[:name].present?
people
end
在这里,我能够保留 的值,params[:name]
但不能保留 的值params[:only_students]
。提交表单后,它始终保持未选中状态。如何保留已检查和未检查的值?
解决方案
f.check_box
check_box_tag
期望通过布尔值检查,并且每个参数都是一个字符串(如果存在,字符串总是被评估为真)所以你应该这样做:
checked: params[:only_students].present?
你不必担心参数的值,因为未检查的参数在发布时不会发送.
编辑:
以上适用于check_box_tag
.
f.check_box
很棘手,你应该仔细阅读描述:https
://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-check_box 你描述的行为似乎很正确,你可以处理它或切换到check_box_tag
在不更新模型属性时作为更好的选择
推荐阅读
- android - Android Studio:错误:程序类型已存在:android.support.v4.app.BackStackRecord$Op
- javascript - 如何防止精灵在 Matter.js 中被鼠标移动?
- c# - 为什么这个简单的 WPF 命令不起作用?
- c++ - 为什么当我使用变量存储数值结果而不是重新计算时,C++ 程序运行速度较慢?
- css - 如何使用块显示将thead 和 tbody 宽度保持在 100%
- javascript - 表单提交页面刷新后显示隐藏的 div
- c# - EF core 2.1 使用投影
- c# - 如何将数据从数据表复制到数据库表?
- reactjs - 我如何在反应中运行现有项目
- javascript - 过滤 JSON 数据 ( D3.js )