【问题标题】:Mongoid, boolean form fieldsMongoid,布尔表单域
【发布时间】:2011-05-15 00:51:27
【问题描述】:

所以这既是一个关于如何构造布尔类型的选择的问题,也是关于表单字段本身的问题。例如,如果用户在注册时必须选择一个团队(并且出于演示目的),例如“wizard”或“archer”,那么我应该有:

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>

但这不起作用,因为您可以选择任意数量的项目。如何防止用户选择多个单选?

【问题讨论】:

    标签: ruby-on-rails mongoid


    【解决方案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 成为真实字段,指向包含角色的单独表(用户属于_to :role,角色 has_many :users) .这样,如果您添加新角色,则无需更改任何代码,只需在表格中添加一行即可。您仍然可以在 User 模型上使用布尔方法(例如 user.is_wizard?),但它们将根据角色进行计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多