Mongoid,布尔表单字段

时间:2011-05-15 00:51:28

标签: ruby-on-rails mongoid

因此,这既是关于如何构造布尔类型选择的问题,也是表单字段本身的问题。例如,如果用户在注册时必须选择一个团队(以及用于演示目的),例如“向导”或“弓箭手”,那么我应该如此:

field :wizard, type: Boolean
field :archer, type: Boolean

但是它们只能是一个或另一个,所以我如何用无线电字段构建我的表单,以便用户只能选择一个或另一个,我不确定我是否正确这样做,所以我的形式说我有类似的东西:

<p><%= f.label "wizard" %><%= radio_button(:user, :wizard, "True") %></p>
<p><%= f.label "archer" %><%= radio_button(:user, :archer, "True") %></p>

但是这样做不起作用,因为您可以根据需要选择任意数量的项目。如何阻止用户选择多个无线电选择?

1 个答案:

答案 0 :(得分:1)

单选按钮在HTML中的不同字段中不起作用。为了使它们相关,只能选择一个,它们必须具有相同的name属性值。生成您的名称值为“user.wizard”和“user.archer”。你需要这样的东西:

<p><%= f.label "wizard" %><%= radio_button(:user, :role, "wizard") %></p>
<p><%= f.label "archer" %><%= radio_button(:user, :role, "archer") %></p>

然后在模型中使用代码来删除所选角色以适当地设置布尔字段。

总的来说,我建议您更改数据模型以充当字符串字段,或规范化并使role_id成为真实字段,指向包含角色的单独表(用户belongs_to:角色,角色has_many:用户) 。这样,如果添加新角色,则无需更改任何代码,只需向表中添加一行即可。您仍然可以在User模型上使用布尔方法(例如,user.is_wizard?),但它们将根据角色计算。