2013-07-27 28 views
12

Tôi đã googled/stack tràn cho giờ và không tìm thấy một giải pháp cho vấn đề này. Tôi tự hỏi nếu cài đặt PaperClip của tôi bằng cách nào đó không thành công. Tôi đang cố gắng để xác nhận một tập tin đính kèm hình ảnh trong thư mục mô hình của tôi:Ruby on Rails PaperClip Gem validate_attachement lỗi

validates :image, presence: true, 
content_type: { content_type: ['image/jpeg', 'image/jpg', 'image/png', 'image/gif']}, 
size: { less_than: 5.megabytes } 

Tôi cũng đã thử mã tương tự nhiều đến đọc cho tôi tập tin trên github:

validates_attachment :image, :presence => true, 
:content_type => { :content_type => 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' }, 
:size => { less_than: => 5.megabytes } 

Và tôi đã cố gắng sử dụng xác thực riêng lẻ

validates_attachment_presence :image 
validates_attachment_content_type :image,:content_type => ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'] 
validates_attachment_size :image,:less_than => 5.megabytes 

Tôi gặp lỗi trong mọi trường hợp. Hoặc:

Routing Error 
undefined method `before_image_post_process' for #<Class:0x00000101461750> 
Try running rake routes for more information on available routes. 

Hoặc:

NoMethodError in PinsController#index 
undefined method `key?' for nil:NilClass 

Trả lời

32

Bạn có has_attached_file :image trong tập tin của bạn? Nếu có, hãy đảm bảo nó trước validates_attachment.

+0

Bạn đúng @savmac, thứ tự quan trọng. Tôi có cùng một vấn đề, nhưng tôi nhớ tôi đã đọc ở đâu đó, các hiệp hội phải luôn luôn trước khi xác nhận. – egyamado

+0

Kẹp giấy có thể ném lỗi tốt hơn trong trường hợp không tìm thấy tệp đính kèm được chuyển đến 'validates_attachment'! – dolzenko

1

Bản sửa lỗi của savmac chỉ hoạt động cho tôi ngay bây giờ. tôi đã gặp vấn đề tương tự khi heroku mở. các dòng trong mô hình đã được ra khỏi trật tự trước đó và ứng dụng của tôi đã làm việc liên tục trong nhiều tháng - dunno những gì thay đổi. cảm ơn!

4

tôi cứ bị lỗi này mỗi lần chỉ vì tôi luôn quên để đổi tên biến hình ảnh cùng một cách (sau khi sao chép từ đoạn):

has_attached_file :avatar... 

validates_attachment_content_type :photo, :content_type... 

→ Nên cũng :avatar thay vì :photo

Đó là một ví dụ hoàn hảo về cách các vấn đề có thể xáo trộn khi mã không phải là DRY.