重构 simple_form 表单单选按钮字段

问题描述 投票:0回答:1

我有一个

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
属性,因此默认情况下不会选择任何值。

任何其他想法也欢迎!谢谢!

ruby-on-rails simple-form
1个回答
0
投票

当您创建

@user
时,我只需在控制器中执行此操作:

def new
  @user = User.new apartment: nil
end
© www.soinside.com 2019 - 2024. All rights reserved.