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

时间:2016-02-23 19:31:31

标签: ruby-on-rails ruby activerecord formbuilder

我在Rails网站上使用FormBuilder来创建一个新的ActiveRecord对象。

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

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

1 个答案:

答案 0 :(得分:0)

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

例如,假设您的用户模型可以是“提供商”或“客户”,但不是两者。您可以设置以下方法:

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

然后在您看来,让你的单选按钮引用'角色'而不是'客户'或者'提供商'。

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

基本上这样做是将选中按钮的值放入&#39;角色&#39;表单提交时你的参数的关键,当你在控制器中执行role=User.create(params)时,这反过来会使检查的单选按钮的值发送到上面定义的User.update(params)方法。在构建表单时,它还将运行@user.role以查看是否已设置值,并检查相应的按钮。不要忘记将新方法的名称添加到适当控制器的允许参数中。