no validates_attachment_file_name al actualizar a Paperclip 4.1 desde 3.5

Tenemos un código que se parece a la ejecución del clip de papel molino:

has_merchants_attached_file :pdf, storage: :s3, s3_credentials: Mbc::DataStore.s3_credentials, s3_permissions: :private, path: ":identifier_template.pdf", bucket: Mbc::DataStore.forms_and_templates_bucket_name validates_attachment_file_name :pdf, :matches => [/pdf\Z/] 

Lo que genera un error:

 undefined method `validates_attachment_file_name' for # 

Curiosamente, cuando bajamos a 3.5, encontramos el mismo problema.

El controlador que está generando esto es:

 def index @fidelity_templates = FidelityTemplate.order("identifier asc").all end 

Adicionalmente:

 def has_merchants_attached_file(attribute, options={}) if Rails.env.test? || Rails.env.development? has_attached_file attribute, path: "paperclip_attachments/#{options[:path]}" else has_attached_file attribute, options end end 

¿Alguna idea sobre lo que podría estar causando esto?

Puedes leer sobre los validadores proporcionados aquí:

https://github.com/thoughtbot/paperclip#validations

Los validadores incluidos son:

  • AttachmentContentTypeValidator
  • AttachmentPresenceValidator
  • AttachmentSizeValidator

Se pueden utilizar de cualquiera de estas formas:

 # New style: validates_with AttachmentPresenceValidator, :attributes => :avatar # Old style: validates_attachment_presence :avatar 

ACTUALIZACIÓN …

Si lees más abajo en el enlace que te he dado arriba, verás una sección sobre Validaciones de seguridad (Gracias Kirti Thorat):

https://github.com/thoughtbot/paperclip#security-validations

Dan un ejemplo sobre cómo validar el formato del nombre de archivo:

 # Validate filename validates_attachment_file_name :avatar, :matches => [/png\Z/, /jpe?g\Z/] 

Desde su fragmento de código parece que su validación debería funcionar como está.

Sin embargo, nunca he visto un clip utilizado con esta syntax:

 has_merchants_attached_file ... 

Tal vez esa es la fuente de sus problemas? Usualmente usaría lo siguiente para adjuntar archivos a su modelo:

 has_attached_file :pdf ...