2012-05-18 46 views
5

Tôi đang viết một validator tùy chỉnh trong ActiveRecord để một thời hạn có ý nghĩa:Rails: Members một ngày Lớn hơn Một

validate :deadline_is_possible? 

    def deadline_is_possible? 
    if deadline > begins_at 
     errors.add(:deadline, 'must be possible') 
    end 
    end 

Tuy nhiên điều này sẽ tạo ra một "NoMethodError: Phương pháp xác định`>' cho nil: NilClass ". Sự kiện của tôi đã cố gắng biến ngày thành chuỗi, như:

và mặc dù nó không phát sinh lỗi, cũng không hoạt động.

Tôi cũng tuyên bố xác nhận khác (chẳng hạn như

def begins_at_is_date? 
    if !begins_at.is_a?(Date) 
     errors.add(:begins_at, 'must be a date') 
    end 
    end 

mà làm việc OK.

Trả lời

1

Người ta phàn nàn vì deadline là con số không. In nó để xác nhận đây là vấn đề.

irb(main):001:0> nil > Date.new 
NoMethodError: undefined method `>' for nil:NilClass 
2

Bạn có thể cần phải xử lý nếu một trong các ngày là số không. Bạn có thể đặt các giá trị này để có giá trị mặc định trong cơ sở dữ liệu thời hạn hoặc thực hiện như sau:

validate :deadline_is_possible? 

    def deadline_is_possible? 
    return if [deadline.blank?, begins_at.blank?].any? 
    if deadline > begins_at 
     errors.add(:deadline, 'must be possible') 
    end 
    end 
+0

này loại bỏ các lỗi, tuy nhiên nó không hoạt động như mong đợi: '@ event.deadline = @ event.begins_at + 1.day;' '@event.should_not be_valid' lợi nhuận hợp lệ. .. Tôi có nên chọn một viên ngọc cụ thể hơn để thực hiện công việc không? – piffy

+0

tôi sửa bản thân mình: mã trên hoạt động, trong khi đây không: '@ event.deadline = @ event.begins_at;' '@event.should be_valid' lợi nhuận KHÔNG hợp lệ ... – piffy

+0

Đó có thể là gây hiểu nhầm ... bạn sẽ thử '@ event.deadline = @ event.begins_at; @ event.should có (0) .errors_on (: deadline) ' –

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