2011-09-25 21 views
5

Có cách nào để kích hoạt xác thực chỉ trong các biểu mẫu cụ thể (hành động của bộ điều khiển), không phải trên toàn cầu ở mỗi lần lưu hoặc cập nhật không? Thứ gì đó giống như User.create(:validate=>true) cờ.Chỉ có hiệu lực ở dạng cụ thể

+0

Tại sao bạn đang cố thực hiện việc này? Có lẽ chúng ta có thể đưa ra một câu trả lời tốt hơn nếu chúng ta biết lý do đằng sau câu hỏi của bạn. – rdvdijk

+0

Tôi đã nhầm lẫn Mô hình người dùng, không tách rời khỏi hồ sơ, khi bạn đăng ký, bạn chỉ cần cung cấp một vài trường và phần còn lại là điền vào từ hành động chỉnh sửa của người dùng. – methyl

+0

Btw bạn có thể vượt qua tất cả các xác nhận hợp lệ như: Model.save (false) – emrahbasman

Trả lời

8

Có, bạn có thể cung cấp các điều kiện để kiểm chứng thực, ví dụ:

validates_presence_of :something, :if => :special? 

private 

def make_sepcial 
    @special = true 
end 

def special? 
    @special 
end 

Bây giờ tất cả các bạn phải làm gì để bật các kiểm chứng thực là:

s = SomeModel.new 
s.make_special 
+0

Vì vậy, tôi đã thiết lập đặc biệt để sai sau khi tiết kiệm mô hình, phải không? – methyl

+0

Không. '@ special' chỉ là một biến mẫu. Trừ khi bạn có thêm công việc để làm sau đó bạn chỉ có thể để cho nó chết, nó sẽ không được tiếp tục để tiếp tục truy vấn cơ sở dữ liệu. – thomasfedb

4

Như bạn đã giải thích trong các ý kiến, bạn muốn bỏ qua xác nhận cho các bản ghi mới. Trong trường hợp đó, bạn có thể sử dụng câu trả lời thomasfedb, nhưng không sử dụng biến @special, nhưng:

validates_presence_of :something, :if => :persisted? 

này sẽ chỉ xác nhận cho lưu User s, nhưng không phải cho mới User s. Xem tài liệu API trên persisted?.

+0

Bạn cũng có thể sử dụng: trừ khi =>: tồn tại? nếu bạn muốn xác nhận ngược lại trên mới nhưng không muốn lưu. –

+0

Đây là câu trả lời đúng – doz87

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