2012-05-28 32 views
5

Tôi có một mô hình với thuộc tính được tuần tự hóa (mảng). Tôi muốn xác thực mô hình chỉ khi mỗi thành viên của mảng được bao gồm trong các tùy chọn được xác định trước.Làm cách nào để thực hiện xác thực tính bao gồm trên thuộc tính được tuần tự hóa?

Ví dụ: Tôi có mô hình Người có thuộc tính "tâm trạng". Người dùng có thể có nhiều tâm trạng, nhưng mỗi tâm trạng phải là "hạnh phúc", "buồn", "mệt mỏi" hoặc "tức giận".

Mô hình này sẽ là một cái gì đó như thế này:

class Person < ActiveRecord::Base 
    MOODS = %w[happy sad tired angry] 
    # validates :inclusion => { :in => MOODS } 

    attr_accessible :mood 
    serialize :mood 
end 

Các xác nhận nhận xét không hoạt động. Có cách nào để làm cho nó hoạt động hoặc tôi cần một xác nhận tùy chỉnh?

(. Lưu ý: Tôi không muốn tạo ra một mô hình Mood riêng)

Trả lời

8
class Person < ActiveRecord::Base 
    MOODS = %w[happy sad tired angry] 
    validate :mood_check 
    attr_accessible :mood 
    serialize :mood 

protected 
    def mood_check 
    mood.each do |m| 
     errors.add(:mood, "#{m} is no a valid mood") unless MOODS.include? m 
    end 
    end 

end 
+0

Kiểm tra tài liệu này, http://guides.rubyonrails.org/active_record_validations_callbacks.html#inclusion. Bạn không phải tạo xác thực tùy chỉnh cho điều đó. – Chamnap

+0

trên thuộc tính tuần tự hóa, bạn làm, nếu không giá trị được tuần tự được kiểm tra để bao gồm, có nghĩa là tâm trạng = [mệt mỏi, tức giận] sẽ thất bại vì MOODS.bao gồm? (Tâm trạng) là false –

+0

Ah, tôi không thấy phương thức xê-ri hóa. Câu trả lời của bạn nên đúng lúc đó. – Chamnap

2

Rời này đây trong trường hợp nó giúp mọi người trong tương lai - Tôi đã viết một viên ngọc để xử lý tốt hơn việc chứng thực serialized thuộc tính. Bạn chỉ có thể đặt những kiểm chứng thực trong một cú pháp khối, những cách bạn có thể mong đợi để:

class Person < ActiveRecord::Base 
    MOODS = %w[happy sad tired angry] 
    attr_accessible :mood 
    serialize :mood 

    validates_array_values :mood, inclusion: { in: MOODS } 
end 

https://github.com/brycesenz/validates_serialized

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