在视图中列出用户性别选项

时间:2014-12-06 08:46:13

标签: ruby-on-rails

我正在寻求填写表单中的选择列表,其中包含用户性别选项。我有一本学习Rails的书,它通过在模型中创建一个数组然后在视图中引用它来对信用卡选项使用类似的方法。不幸的是,当我使用这种方法时,我收到一个引用我视图中的行的错误说明: "未初始化的常数GENDER_OPTIONS"

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable

  GENDER_OPTIONS = { "Male" => :true, "Female" => :false, "Unspecified" => :nil}

  has_many :discussions
  has_many :comments
end


<div>
  <%= f.label :gender %><br />
  <%= f.select :gender, User::GENDER_OPTIONS​ %>
</div>

2 个答案:

答案 0 :(得分:2)

“sex”不应存储为布尔值 - 它不是真/假值。除了将数据库中一半人标记为“假”之外,当您编写SQL查询时,您(以及未来的开发人员)将必须知道神奇的值。

布尔字段不应该有三个可能的状态(true / false / nil) - 这只是要求麻烦。

要从架构方面使数据库易于理解,请将字段设置为字符串,并存储值“male”,“female”或“unspecified”(或只是空白)。

然后问问自己:为什么你真的需要向人们询问他们的性别?除非是约会网站或医疗数据库;否则,这只是个人信息的个人信息 - 你可能会问他们的鞋子尺寸(或任何其他身体部位)。

答案 1 :(得分:1)

尝试使用帮助程序和区域设置。

# app/helpers/application_helper.rb

def gender_lists 
  I18n.t(:gender_lists).map { |key, value| [ value, key ] } 
end


# config/locale/en.yml

en:
  gender_lists:
      "": Unspecified
      "true": Male
      "false": Female

在你看来,你可以这样做

<div>
  <%= f.label :gender %><br />
  <%= f.select :gender, gender_lists​ %>
</div>

===

注意:

只是建议,用户string输入数据而不是boolean