Ruby ActionView FormBuilder单选按钮设置多个值?

Ruby ActionView FormBuilder radio button to set multiple values?

我正在 Rails 网站中使用 FormBuilder 创建新的 ActiveRecord 对象。

不过,我有两个互斥的 class 字段,我想创建一个 radio_button 允许我选择要选择的字段;但是,FormBuilder class 似乎限制您一次只能为每个单选按钮集设置一个变量。

有没有办法添加一些辅助逻辑,如果选择一个选项,另一个属性也会自动设置?

是的。在您的模型上创建一个新方法,它接受一个值并根据其输入设置互斥字段,另一个方法将检查这两个字段和 return 表单的匹配值。

例如,假设您有一个可以是 'provider' 或 'customer' 的用户模型,但不能同时是两者。您可以设置以下方法:

def role=(str)
   if str == 'provider'
     self.provider = true
   elsif str == 'customer'
     self.customer = true
   end
end

def role
 if self.provider?
   'provider'
 elsif self.customer?
   'customer'
 else
   nil
 end
end

然后在您看来,让您的单选按钮引用 'role' 而不是 'customer' 或 'provider'。

<% form_for @user do |f| %>
  <%= f.radio_button :role, 'provider' %>
  <%= f.radio_button :role, 'customer' %>
<% end %>

本质上,这将做的是在提交表单时将选中按钮的值放入参数的 'role' 键中,这反过来会导致选中单选按钮的值被发送到 role= 当您在控制器中执行 User.create(params)User.update(params) 时上面定义的方法。它也会 运行 @user.role 在构建表单时查看是否已经设置了值,并检查相应的按钮。不要忘记将新方法的名称也添加到相应控制器的允许参数中。