2011-02-22 14 views
23

Tôi có một vài mô hình đơn giản có liên quan như sau:xác nhận: hiện diện vs ray validates_presence_of sử dụng 3

NGƯỜI MẪU

class Task < ActiveRecord::Base 
    belongs_to :user 
    validates :name, :presence => true, :message => 'Name cannot be blank, Task not saved' 
end 

class User < ActiveRecord::Base 
    has_many :tasks 
end 

XEM có một cuộc gọi trong nó như vậy: user.tasks < - sau đó tôi vòng qua các nhiệm vụ

các Vấn đề:

Trong mô hình nhiệm vụ -

khi tôi sử dụng:

validates :name, :presence => true , :message => 'Name cannot be blank, Task not saved' 

tôi nhận được một lỗi 500:

ActionView::Template::Error (uninitialized constant User::Task): 
NameError in View file 

khi tôi sử dụng:

validates_presence_of :name 

Tất cả mọi thứ hoạt động.

Tôi đã nghĩ cả hai phương pháp xác thực ở trên cùng một nơi ... là vấn đề phải làm với các liên kết và cách xác thực gắn với các mô hình liên quan. Tôi có linh cảm rằng một cái gì đó đang diễn ra với cách mọi thứ liên quan, nhưng nó chỉ là một linh cảm.

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn rất nhiều.

Trả lời

48

Khi bạn sử dụng định dạng validates :name mới hơn, bạn có thể đặt nhiều xác thực trong một dòng thay vì phải có nhiều dòng cho mỗi loại xác thực. Bởi vì điều này, khi Rails truy cập thông số :message của bạn, nó cho rằng đó là phương thức xác thực thay vì thông báo được liên kết với :presence. Hãy thử thay vào đó:

validates :name, :presence => {:message => 'Name cannot be blank, Task not saved'} 

Ngoài ra, tùy thuộc vào cách bạn hiển thị lỗi của mình, lỗi này thực sự có thể hiển thị là 'Tên Tên không thể ....'; nếu vậy, bạn sẽ muốn đặt tin nhắn thành 'không thể để trống, Tác vụ chưa được lưu'.

+0

Cảm ơn rất nhiều! Điều đó đã làm các trick! – RidingRails

+1

Tôi có một câu hỏi về quốc tế hóa liên quan đến vấn đề này. Nếu Rails cung cấp tên trường, thông báo lỗi này có thể được bản địa hóa hoàn toàn như thế nào? Ví dụ: trong tiếng Tây Ban Nha, 'tên' phải là 'nombre'. Có cách nào để chặn hoàn toàn tin nhắn mặc định không? – jn29098

+0

Tôi biết đây là một bài đăng cũ nhưng thông báo lỗi này nên được hiển thị ở đâu và hiển thị sau khi gửi biểu mẫu chẳng hạn? cảm ơn bạn – Richlewis

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