2010-06-19 21 views
13

Tôi muốn thực thi xác thực tùy chỉnh trước khi tạo bản ghi?Thực thi xác thực tùy chỉnh trước khi tạo bản ghi?

Dường như đây là phương pháp phù hợp: before_validation_on_create. Ví dụ:

before_validation_on_create :custom_validation 

Nhưng tôi không chắc chắn. Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

tôi thấy có: validate_on_create. – keruilin

Trả lời

15

before_validation_on_create xảy ra trước khi xác nhận trên tạo ... nhưng họ không kiểm chứng thực bản thân.

Điều bạn có thể muốn làm là sử dụng validate và phương pháp riêng để thêm vào mảng lỗi. như thế này:

class IceCreamCone 

    validate :ensure_ice_cream_is_not_melted, :before => :create 

    private 
    def ensure_ice_cream_is_not_melted 
     if ice_cream.melted? 
     errors.add(:ice_cream, 'is melted.') 
     end 
    end 
    end 
+1

Tôi thích ví dụ của bạn nói riêng. –

+1

Ví dụ này khiến tôi cười khúc khích như một cô bé ở văn phòng – bpromas

+3

Vui vì bạn thích nó! Tôi quên tôi đã viết điều này 5 năm trước. Để ghi lại, các cậu bé cũng có thể cười khúc khích. –

1

Có một nguồn lực lớn vào đây để thông tin về callbacks và thứ tự mà chúng xảy ra ở: móc

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

+0

Tại sao điều này lại được bình chọn? Nó chỉ ra tài liệu rất rõ ràng mô tả giải pháp cho vấn đề của OP và hiểu rõ hơn về các xác nhận nói chung. – JohnMetta

+1

Nó đã được giảm xuống vì nó không phải là một câu trả lời, nó chỉ là một liên kết đến một tham chiếu bên ngoài. – henrebotha

29

Trong ray 3

before_validation_on_create :do_something 

đã được thay thế bằng:

before_validation :do_something, :on => :create 
+0

Tôi không nghĩ rằng điều này giải quyết vấn đề chạy xác thực tùy chỉnh trước khi tạo, nhưng nó trả lời câu hỏi tôi đã đến đây với. – mwfearnley

2

Sau đây làm việc cho tôi trong Rails 5:

validate :custom_validation_method, :on => :create

Đang chạy

validate :custom_validation_method, :before => :create

đã cho tôi lỗi sau:

Unknown key: :before. Valid keys are: :on, :if, :unless, :prepend. 
Các vấn đề liên quan