在 Rails 中的 form_with 中重新加载页面时保留复选框值 5
Retain checkbox value on page reload in form_with in Rails 5
我有一个使用 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 %>
controller.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
作为更好的选择
以上所有解决方案都不适合我。试试这个:
<%= check_box_tag :only_students, true, params[:only_students] %>
我有一个使用 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 %>
controller.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
作为更好的选择
以上所有解决方案都不适合我。试试这个:
<%= check_box_tag :only_students, true, params[:only_students] %>