Đường ray không hỗ trợ ENUM
kiểu dữ liệu ra khỏi hộp. Điều này là do không phải tất cả các cơ sở dữ liệu đều hỗ trợ dữ liệu đó. Tôi thấy rằng một cách phổ biến để xử lý các giá trị ENUM
là tạo cột enum theo cách thủ công trong cơ sở dữ liệu của bạn (PostgreSQL trong trường hợp của bạn) và xử lý nó dưới dạng cột string
trong ứng dụng Rails của bạn. Sau đó, sử dụng trình xác thực validates_inclusion_of để buộc sử dụng các giá trị được phép.
validates_inclusion_of :gender, :in => [ "male", "female" ]
Và sử dụng SQL bản địa trong việc di chuyển của bạn để thêm các lĩnh vực enum:
class AddEnumType < ActiveRecord::Migration
def up
execute ".." # your native PostgreSQL queries to add the ENUM field
end
end
chỉnh sửa (tháng 6 năm 2014)
Rails 4.1 tại supports enums. Các validates_inclusion_of
bây giờ có thể được thay đổi để:
enum gender: [ :male, :female ]
(Tuy nhiên, điều này vẫn không natively hỗ trợ bởi cơ sở dữ liệu cơ bản, do đó di cư SQL mẹ đẻ vẫn cần thiết.)
exac gì tly ngăn cản bạn thêm enum này trong Postgresql thông qua di chuyển, và sau đó sử dụng nó? – plang