2011-09-20 29 views
7

Trong một initializer Tôi có một khổng lồ COUNTRY_CODES băm, với định dạng:Validate mô hình trường: nếu giá trị tương đương với một chìa khóa trong một hash

{ :us => "United States, :de => "Germany" } 

Trong mô hình của tôi, tôi muốn xác nhận rằng giá trị nhập vào là:

  • hiện
  • một chìa khóa mã băm đất nước tôi

Làm thế nào để tôi sử dụng điều này?

tôi không thể sử dụng:

validates :country, :presence => true, 
        :inclusion => { :in => COUNTRY_CODES } 

tôi đã cố gắng xác nhận tùy chỉnh, nhưng tôi nhận được lỗi phương pháp khi giá trị là con số không, ví dụ khi tôi cố gắng sử dụng value.to_sym, khiến tôi xác thực trình xác thực và nó trở nên lộn xộn.

Cố gắng tìm ra cách hiệu quả nhất về DRY và hiệu quả.

Trả lời

14

Bạn cần thu thập COUNTRY_CODES khóa (biểu tượng) làm chuỗi và xác thực để đưa vào. Vì vậy, sử dụng:

validates :country, :presence => true,:inclusion => { :in => COUNTRY_CODES.keys.map(&:to_s) } 
+1

FYI, mặc định để đưa vào là: allow_nil => false, không cần sự hiện diện của xác thực. – efoo

4

Hãy thử COUNTRY_CODES.keys nếu bạn chỉ muốn kiểm tra các phím trong băm.

1

Làm như thế này?

Các vấn đề liên quan