以下表单允许更改属性vie UJS,返回的HTML块正确呈现
<% @product.productviews.each do |productview| %>
<%= form_with(url: update_productview_products_path(productview_id: productview.id), method: :patch) do |form| %>
<%= productview.active %> <%= form.check_box :active %>
<%= form.submit t('update') %>
<% end %>
<% end %>
类Product
是has_many :productviews
的父类。上下文:rails 6.1.3
然而,当刷新页面时,check_box总是设置为false,尽管属性值为:
<form action="/products/update_productview?productview_id=1" [...]
true <input name="active" type="hidden" value="0" /><input type="checkbox" value="1" name="active" id="active" />
<form action="/products/update_productview?productview_id=2" [...]
true <input name="active" type="hidden" value="0" /><input type="checkbox" value="1" name="active" id="active" />
<form action="/products/update_productview?productview_id=3" [...]
true <input name="active" type="hidden" value="0" /><input type="checkbox" value="1" name="active" id="active" />
<form action="/products/update_productview?productview_id=4" [...]
false <input name="active" type="hidden" value="0" /><input type="checkbox" value="1" name="active" id="active" />
这是出乎意料的。Rails指南指定Array参数不能很好地与check_box辅助对象配合使用。此实例不是数组参数的情况,尽管它是一个表单数组。
然而,切换到<%= form.check_box_tag "active" %>
或<%= form.check_box_tag :active %>
将返回
undefined method `check_box_tag' for #<ActionView::Helpers::FormBuilder:
这似乎与Rails指南声称的相反
check_box可以用在表单数组中吗?此复选框如何在页面加载时显示属性的值?
您需要将模型传递到表单
<%= form_with(url: update_productview_products_path(productview_id: productview.id), method: :patch, model: productview) do |form| %>
如果这不起作用,你可以将checked
传递到check_box
输入中,但我建议使用第一个选项,如果它的工作
<%= form.check_box :active, checked: productview.active %>