在Rails 3中设置性别字段的最佳方法是什么?我正在使用PostgreSQL。
我目前将它作为一个字符串,但我想知道将它设置为整数会更容易(更好吗?)。如果是这样,怎么办呢?我想为它制作一个下拉列表,其中包括三个值:“男性”,“女性”,“没有您的业务”。
对不起基本问题,但我很好奇简单的最佳做法。
答案 0 :(得分:6)
答案 1 :(得分:6)
这是域名的用途:
DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp;
SET search_path=tmp;
CREATE DOMAIN gender CHAR(1)
CHECK (value IN ( 'F' , 'M' ) )
;
CREATE TABLE persons
( pname VARCHAR
, gend tmp.gender
);
INSERT INTO persons( pname, gend) VALUES ('Alice', 'F') ,('Bob', 'M') ;
INSERT INTO persons( pname) VALUES ('HAL') ;
INSERT INTO persons( pname, gend) VALUES ('Maurice', 'Q') ;
SELECT * FROM persons;
输出:
DROP SCHEMA
CREATE SCHEMA
SET
CREATE DOMAIN
CREATE TABLE
INSERT 0 2
INSERT 0 1
ERROR: value for domain gender violates check constraint "gender_check"
pname | gend
-------+------
Alice | F
Bob | M
HAL |
(3 rows)
答案 2 :(得分:4)
我同意迈克琼斯的观点。 ENUM是完美的。对于很少改变的小型价值观,ENUM非常棒。性别就是一个很好的例子。通常你只需要5:男性,女性,Intersex,变性人,未知。很多人跟3:男,女,其他。 2然而(男性,女性)对于那些不是男性或女性的人是卑鄙的。
答案 3 :(得分:1)
如何使用简单的is_male:boolean
字段?
或is_female
,如果您愿意。
无论哪种方式,默认情况下,nil(null)都不应该计算为true或false。
答案 4 :(得分:0)
只需使用枚举:
CREATE TYPE gen AS ENUM ('f', 'm');
CREATE TABLE lawyers_tb (
ID SERIAL PRIMARY KEY,
name VARCHAR,
gender gen
);
INSERT INTO lawyers_tb (name, gender)
VALUES ('Jose Luis Gonzales', 'm');