我有一个
User
模型,它为 form
和 new
动作渲染 edit
家长(使用 simple_form),这是它的内容:
<div>
<%= simple_form_for @user do |f| %>
<%= f.error_notification %>
<%= f.input :its %>
<%= f.input :name %>
<% if action_name == "edit" %>
<%= f.input :apartment, collection: collection_of(User.apartments), as: :radio_buttons %>
<% else %>
<%= f.input :apartment, input_html: {checked: false}, collection: collection_of(User.apartments), as: :radio_buttons %>
<% end %>
<%= f.input :flat_no %>
<%= f.input :mobile %>
<%= f.input :email %>
<%= f.button :submit %>
<% end %>
</div>
这两个操作的单选按钮字段相似,但不同之处在于我不希望在
new
操作中预先选择该字段中的值。发生这种情况是因为我在数据库级别设置了 default:
,它会自动选择该值。表单中的 checked
HTML 属性检查菜单中的特定值。要取消选中它,必须将属性 checked:
设置为 false
或删除。
我想定义一次单选按钮字段,无论它执行什么操作。如果
action_name
== new
,则必须取消选中,否则选中。那么,我该如何重构这个字段呢?
我尝试过这样做:
<%= f.input :apartment, collection: collection_of(Sabeel.apartments), as: :radio_buttons, input_html: {checked: action_name == "edit"} %>
但这会检查
edit
表单中单选按钮字段的错误值。它检查表单中的最后一个值。发生这种情况是因为 HTML 中的所有 checked
属性都设置为值 checked
,并且由于单选按钮类型只能通过一个值进行检查,因此将检查最后一个值。但对于 new
操作,未设置 checked
属性,因此默认情况下不会选择任何值。
任何其他想法也欢迎!谢谢!
当您创建
@user
时,我只需在控制器中执行此操作:
def new
@user = User.new apartment: nil
end