rails form_with-checkbox在页面刷新时不呈现对象的值



以下表单允许更改属性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 %>

Producthas_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 %>

最新更新