我在Rails网站上使用FormBuilder来创建一个新的ActiveRecord对象。
我有两个相互排斥的类字段,我想创建一个radio_button,允许我选择要选择哪一个;但是,FormBuilder类似乎限制您只按每个单选按钮设置一次设置一个变量。
有没有办法添加一些辅助逻辑,如果选择了一个选项,另一个属性也会自动设置?
答案 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
以查看是否已设置值,并检查相应的按钮。不要忘记将新方法的名称添加到适当控制器的允许参数中。