2011-10-27 25 views
5

Cách tốt nhất để thiết lập trường giới tính trong Rails 3 là gì? Tôi đang sử dụng PostgreSQL.Thiết lập giới tính trong PostgreSQL

Tôi hiện có nó như là một chuỗi nhưng tôi tự hỏi nếu nó sẽ được dễ dàng hơn (tốt hơn?) Để thiết lập nó như là một số nguyên. Nếu vậy, làm thế nào điều này sẽ được thực hiện? Tôi muốn tạo ra một trình đơn thả xuống cho nó bao gồm ba giá trị: "Nam", "Nữ", "Không có doanh nghiệp của bạn".

Xin lỗi vì câu hỏi cơ bản nhưng tôi rất tò mò về các phương pháp hay nhất, đơn giản nhất.

Trả lời

6

Đây là những gì các lĩnh vực được cho:

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; 

Sản lượng:

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) 
0

Làm thế nào về việc sử dụng một lĩnh vực đơn giản is_male:boolean?

Hoặc is_female, nếu bạn thích.

Dù bằng cách nào, không (nil) không được đánh giá là đúng hoặc sai theo mặc định.

+0

Tại sao downvote? –

+0

Đây là giải pháp rất hạn chế. Loại enum bản địa cung cấp tính đặc hiệu hơn. Ngoài ra "Dù bằng cách nào, nil (null) không nên đánh giá đúng hoặc sai theo mặc định." là không đúng sự thật. giá trị null được đánh giá thành giá trị falsey trong ruby. –

2

Tôi đồng ý với Mike Jones. ENUM là hoàn hảo cho việc này. ENUM là tuyệt vời cho các bộ giá trị nhỏ mà hiếm khi thay đổi. Giới tính là một ví dụ hoàn hảo về điều này. Thông thường bạn chỉ cần 5: Nam, Nữ, Intersex, Chuyển giới, Không xác định. Thơ nhiều người đi với 3: Nam, Nữ, Khác. 2 tuy nhiên (Nam, Nữ) có nghĩa là đối với những người không phải là nam hay nữ.

0

Rất dễ dàng:

Chỉ cần sử dụng enum:

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'); 
Các vấn đề liên quan