Estoy utilizando clip para archivos adjuntos para varios modelos utilizando accept_nested_attributes_for. ¿Hay alguna manera de especificar las opciones de estilo de clip específicas para cada modelo?Rails Paperclip estilos polimórficos
Respuesta
Sí. Utilizo herencia de tabla única (STI) en sitios para manejar audio, video e imágenes a través de un modelo de activos.
# models/Asset.rb
class Asset < ActiveRecord::Base
# Asset has to exist as a model in order to provide inheritance
# It can't just be a table in the db like in HABTM.
end
# models/Audio.rb
class Audio < Asset # !note inheritance from Asset rather than AR!
# I only ever need the original file
has_attached_file :file
end
# models/Video.rb
class Video < Asset
has_attached_file :file,
:styles => {
:thumbnail => '180x180',
:ipod => ['320x480', :mp4]
},
:processors => "video_thumbnail"
end
# models/Image.rb
class Image < Asset
has_attached_file :file,
:styles => {
:medium => "300x300>",
:small => "150x150>",
:thumb => "40x40>",
:bigthumb => "60x60>"
}
end
todo entran en Rails como :file
, pero el controlador (A/V/I) conoce a guardar en el modelo apropiado. Solo recuerde que todos los atributos para cualquiera de las formas de medios deben incluirse en Asset
: si el video no necesita subtítulos pero las imágenes sí lo tienen, entonces el atributo de subtítulos será nulo para Video
. No se quejará
Las asociaciones también funcionarán bien si están conectadas a los modelos de STI. User has_many :videos
funcionará igual que lo está usando ahora, solo asegúrese de no intentar guardar en el activo directamente.
# controllers/images_controller.rb
def create
# params[:image][:file] ~= Image has_attached_file :file
@upload = current_user.images.build(params[:image])
# ...
end
Por último, ya que tienen un modelo de activo, todavía se puede leer directamente de ella si, por ejemplo, desea una lista de los 20 Activos más recientes. Además, este ejemplo no está restringido a la separación de tipos de medios, sino que también se puede usar para diferentes tipos de lo mismo: avatar <, Galería < activo, y así sucesivamente.
Una gran parte nicer manera puede ser, (si su uso está tratando con imágenes):
class Image < ActiveRecord::Base
belongs_to :imageable, :polymorphic => true
has_attached_file :attachment, styles: lambda {
|attachment| {
thumb: (
attachment.instance.imageable_type.eql?("Product") ? ["300>", 'jpg'] : ["200>", 'jpg']
),
medium: (
["500>", 'jpg']
)
}
}
end
¿Su respuesta realmente funciona? attachment.instance.imageable_type is nil –
@ArtemAminov Sí funciona ... como lo estoy usando en uno de mis proyectos. –
tal vez me pueda ayudar con mi proyecto, vea el código aquí [enlace] (http://stackoverflow.com/questions/19901485/paperclip-polymorphic-styles) –
- 1. estilos que solicitan condicionalmente a paperclip adjuntos en Rails 3.1
- 2. Rails y Paperclip ... no guarde la imagen original, solo los estilos?
- 3. Rails Paperclip & Multiple File Uploads
- 4. Rails polimórficos has_many: a través de
- 5. Estilos en Paperclip solo si es una imagen [rieles]
- 6. Paperclip establece imágenes por defecto para todos los estilos diferentes
- 7. Utilización de Rails con Paperclip y SWFUpload
- 8. Paperclip for Rails: ¿Puedo acceder al modelo?
- 9. Reemplazando content_type para Rails Paperclip plugin
- 10. Paperclip + Active_admin + Rails 3.0.10 imágenes múltiples
- 11. Rails3 y Paperclip
- 12. Ocultando urls amazon al usar S3, Rails y Paperclip
- 13. Importación de datos antiguos con Rails y Paperclip
- 14. Carga de imágenes de clips en Rails - Paperclip :: CommandNotFoundError
- 15. Rails Paperclip cómo usar las opciones de filtro de ImageMagick?
- 16. forma multi-paso en Rails 3 con archivos adjuntos Paperclip
- 17. Validar la extensión en Paperclip - Ruby on Rails
- 18. Cómo cargar archivos de audio con Paperclip en Rails 3?
- 19. Rails PaperClip Attachments, saber si hay una miniatura de imagen?
- 20. Paperclip: ¿Cómo almacenar una imagen en la consola de Rails?
- 21. Carga de archivos con Activeadmin Rails con paperclip
- 22. Rails Heroku server paperclip Amazon S3 - AWS :: S3 :: Errores :: RequestTimeout
- 23. ImageMagick y Paperclip on Rails solo acepta el archivo bmp
- 24. almacena imágenes localmente para desarrollo s3 para producción Rails Paperclip
- 25. Paperclip/Passenger NotIdentifiedByImageMagickError:
- 26. JAXB - objetos polimórficos unmarshalling
- 27. Tipos polimórficos e IXmlSerializable
- 28. javascript "objetos invocables polimórficos"
- 29. typeid de tipos polimórficos
- 30. problema de mod_rails y Paperclip Paperclip :: NotIdentifiedByImageMagickError
Dónde Cómo se define donde el archivo se guarda? En el modelo de activos? ¿O está el modelo de activos en blanco? say: ': storage =>: s3, : bucket => Rails.application.config.aws_s3_bucket, : s3_credentials =>" # {Rails.root} /config/s3.yml ", : path =>": class /: id /: style /: basename.: extension "' –
Solo uso el valor predeterminado y mantengo el modelo de activos en blanco, pero apuesto a que hay una manera de tener un conjunto predeterminado en el modelo de activos. No lo he intentado. – Eric