2012-05-22 16 views
14

Trong ứng dụng Rails, tôi có một số thuộc tính số nguyên trên mô hình.Làm cách nào để xác thực tính số và đưa vào trong khi vẫn cho phép thuộc tính là không trong một số trường hợp?

Người dùng có thể tạo bản ghi và để trống các thuộc tính này.

Hoặc nếu người dùng nhập giá trị cho các thuộc tính này, chúng phải được xác thực cho số lượng và trong một phạm vi nhất định.

Trong mô hình tôi có một cái gì đó như thế này

validates_presence_of :name  
validates_numericality_of :a, :only_integer => true, :message => "can only be whole number." 
validates_inclusion_of :a, :in => 1..999, :message => "can only be between 1 and 999." 

Nếu bây giờ tôi thử nghiệm với yêu cầu tối thiểu thuộc tính để tiết kiệm:

factory :model do 
    sequence(:name) { |n| "model#{n}" } 
end 

it "should save with minium attributes" do 
    @model = FactoryGirl.build(:model) 
    @model.save.should == false 
end 

tôi nhận được

Validation failed: a can only be whole number., a can only be between 1 and 999. 

Làm thế nào tôi có thể xác nhận tính hợp lệ và số chỉ khi một giá trị được đưa ra cho :a, trong khi vẫn cho phép :a là không trong một số trường hợp?

Cảm ơn

Trả lời

29

Bạn có thể thêm một :allow_nil => true-validates_numericality_of của bạn.

validates_numericality_of :a, :only_integer => true, :allow_nil => true, 
    :message => "can only be whole number." 

Bạn cũng có thể sử dụng greater_than_or_equal_toless_than_or_equal_to tùy chọn nếu bạn chỉ muốn sử dụng một xác nhận:

validates_numericality_of :a, :only_integer => true, :allow_nil => true, 
    :greater_than_or_equal_to => 1, 
    :less_than_or_equal_to => 999, 
    :message => "can only be whole number between 1 and 999." 
+0

cảm ơn, câu trả lời hay –

3

nên đơn giản:

validates_numericality_of :a, :only_integer => true, :message => "can only be whole number.", :allow_nil => true 

tương tự cho các xác nhận thứ hai

+0

cảm ơn, đây chỉ là những gì tôi cần. Tôi đã đưa ra câu trả lời cho Shadwell cho mã DRY của mình. Xấu hổ tôi không thể đánh dấu cả hai là chính xác. –

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