2009-07-31 28 views
10

Tôi có một bộ sưu tập các đối tượng ActiveRecord. Tôi muốn có thể chạy tất cả các xác nhận hợp lệ cho từng đối tượng này mà không thực sự lưu chúng vào cơ sở dữ liệu. Tôi chỉ muốn biết liệu chúng có hợp lệ không Tôi có thể lưu chúng vào cơ sở dữ liệu không. Nói cách khác, về cơ bản tôi muốn điền vào cấu trúc dữ liệu errors cho từng đối tượng của mình. Có cách nào để làm việc này không? Hoặc có lẽ tôi đang thiếu một cái gì đó về vòng đời của bộ sưu tập errors?Chạy xác thực ActiveRecord mà không lưu

Trả lời

23

Bạn có thể làm như sau để kiểm tra xem một mô hình có giá trị:

@user = User.new 
if @user.valid? 
    #do things 

Nếu bạn muốn nhìn thấy những sai sót được, bạn có thể làm:

@user = User.new 
unless @user.valid? 
    @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"} 

Gọi ".có hiệu lực?" phương pháp chạy xác thực của bạn, đặt tất cả các lỗi của bạn vào một đối tượng ActiveRecord :: lỗi, có thể được truy cập như tôi đã làm trong ví dụ trên. Hãy thử các ví dụ trong Bảng điều khiển để cảm nhận nó nếu bạn muốn.

+0

Dọc theo các dòng tương tự, tôi đang cố gắng hiển thị liên kết xuất bản dựa trên hồ sơ có giá trị để xuất bản hay không. Trong xác nhận của tôi, tôi đang sử dụng xác nhận: nếu định dạng. Có cách nào dễ dàng để thay đổi thuộc tính để nói: true và sau đó kiểm tra xem nó có hợp lệ để xuất bản không? Ví dụ: post = Post.new (: title => "title",: published => false) post.published = true nếu post.valid? post.published = false – chetu

2

Chạy phương thức #valid? trên đối tượng sẽ chạy tất cả các xác thực và điền cấu trúc errors.

dude = Person.new 
unless dude.valid? 
    # Examine errors 
end 
Các vấn đề liên quan