{"id":21156,"date":"2012-10-08T09:14:10","date_gmt":"2012-10-08T09:14:10","guid":{"rendered":"http:\/\/attachinary_a_modern_attachments_solution_for_ruby_on_rails"},"modified":"2022-04-24T22:01:12","modified_gmt":"2022-04-25T05:01:12","slug":"attachinary_a_modern_attachments_solution_for_ruby_on_rails","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails","title":{"rendered":"Attachinary &#8211; a modern attachments solution for Ruby on Rails"},"content":{"rendered":"<div>When developing a website you are required for a somewhat tedious work of handling dynamically uploaded content. The constantly added content includes images uploaded by your users and content administrator, user documents and other files.<\/div>\n<div>&nbsp;<\/div>\n<div>As a developer, you&#8217;ll be responsible for adding integration of attachments to your application&#8217;s model and taking care of the upload, normalization, storage, transformation and delivery of such assets.<\/div>\n<div>&nbsp;<\/div>\n<div>Over time, we&#8217;ve run into a lot of attachment management libraries for many of the web development frameworks available. For <strong>Ruby on Rails<\/strong> alone there are <strong>CarrierWave<\/strong>, <strong>Paperclip<\/strong>, <strong>Dragonfly<\/strong>, <strong>attachment_fu<\/strong> and quite a few others.&nbsp;<\/div>\n<div>&nbsp;<\/div>\n<div>While <a href=\"https:\/\/cloudinary.com\/\" target=\"_blank\" rel=\"noopener\">Cloudinary<\/a>&nbsp;streamlines all your image management needs and takes care of uploads, storage, transformations, transformations and delivery, you still need to integrate it with your application&#8217;s model. To simplify the integration, Cloudinary offers many client libraries for all major web dev platforms and programming languages. For example, Cloudinary&#8217;s <strong>Ruby GEM<\/strong> includes a plugin that seamlessly integrate with <strong>CarrierWave<\/strong> for managing uploads and image transformations in the cloud. We&#8217;ve covered this in a previous <a href=\"https:\/\/cloudinary.com\/blog\/ruby_on_rails_image_uploads_with_carrierwave_and_cloudinary\" target=\"_blank\" rel=\"noopener\">blog post<\/a>.<\/div>\n<div>&nbsp;<\/div>\n<div>Today, we wanted to tell you about a new attachment management library for Ruby on Rails &#8211; <a href=\"https:\/\/github.com\/assembler\/attachinary\" target=\"_blank\" rel=\"noopener\"><span style=\"color: #bb0000\"><strong>Attachinary<\/strong><\/span><\/a>. Attachinary was developed by <strong>Milovan Zogovic<\/strong> and it does an amazing job in simplifying attachment management in your application&#8217;s model.&nbsp;<\/div>\n<div>&nbsp;<\/div>\n<div>We&#8217;ve tried Attachinary, really liked it and wanted to share our experience working with it.&nbsp;<\/div>\n<div>&nbsp;<\/div>\n<h3>How is Attachinary different?&nbsp;<\/h3>\n<div>There are so many other attachment management libraries, why do we need another one?&nbsp;<\/div>\n<div>Well, here are a few reasons:<\/div>\n<div>&nbsp;<\/div>\n<div>\n<ul>\n<li>Attachinary offers non-intrusive integration with ActiveRecord and Mongoid model. You no longer need to maintain DB columns in your model entities for referencing uploaded images.<\/li>\n<li>With attachinary it&#8217;s very easy to switch between a single image and multiple images for a model entity.<\/li>\n<li>Attachinary allows for simple integration through Rails 3.2&#8217;s modern Asset Pipeline.<\/li>\n<li>Attachinary uses Cloudinary for uploading files to the cloud, transforming images and delivering files through a fast CDN. No need to install any image transformation software.<\/li>\n<li>Attachinary has built-in integration with Cloudinary&#8217;s <a href=\"https:\/\/cloudinary.com\/blog\/direct_image_uploads_from_the_browser_to_the_cloud_with_jquery\" target=\"_blank\" rel=\"noopener\">jQuery-based direct upload<\/a> from the browser. Progress indication and image preview included.<\/li>\n<li>Attachinary is extremely simple to use and requires minimal changes to your existing code base.<\/li>\n<\/ul>\n<\/div>\n<div>&nbsp;<\/div>\n<h3>How is Attachinary used?<\/h3>\n<div>After a very quick Cloudinary &amp; Attachinary <a href=\"https:\/\/github.com\/assembler\/attachinary#installation\" target=\"_blank\" rel=\"noopener\">GEM installation and setup<\/a>, you can add any attachment attribute to your model class. The following code shows a User model entity:<\/div>\n<pre>class User &lt; ActiveRecord::Base\n  attr_accessible :name\n  \n  has_attachment  :avatar\n  has_attachments :photos, :maximum =&gt; 3\nend\n<\/pre>\n<div>The &#8216;<strong>has_attachment<\/strong>&#8216; and &#8216;<strong>has_attachments<\/strong>&#8216; methods were used to define a User that can have a single &#8216;avatar&#8217; and up to 3 &#8216;photo&#8217; attachments. That&#8217;s it, no additional migrations or code changes are required.<\/div>\n<div>&nbsp;<\/div>\n<div>Uploading assets to Cloudinary is also very simple with Attachinary. The following HAML view code shows how to create an upload form. The &#8216;<strong>attachinary_file_field_tag<\/strong>&#8216; view helper method is responsible for all the magic. When this form is submitted, all images will be automatically uploaded to the cloud directly from your website visitor&#8217;s browser. Multiple photos can be uploaded from this same form and the identifiers of the uploaded images will be automatically stored in your model.<\/div>\n<pre>  = form_for(@user) do |user_form|\n    = user_form.text_field(:name)\n    = attachinary_file_field_tag 'user[avatar]', @user, :avatar\n    = attachinary_file_field_tag 'user[photos]', @user, :photos\n    \n    = user_form.submit(\"Save\")\n<\/pre>\n<div>Model management in your controller is exactly the same as always:<\/div>\n<pre>def create\n  @user = User.new(params[:user])\n  @user.save!\nend\n<\/pre>\n<div>You can display uploaded images, generate thumbnails and apply image transformations by using Cloudinary&#8217;s <a href=\"https:\/\/cloudinary.com\/documentation\/rails_integration#display_and_transform\" target=\"_blank\" rel=\"noopener\"><strong>cl_image_tag<\/strong><\/a>. Here&#8217;s an example of a view code that displays a 80&#215;100 face detection based thumbnail of the user&#8217;s avatar and a 70&#215;50 rounded corner version of all uploaded photos.<\/div>\n<pre>- if user.avatar.present?\n  = cl_image_tag(user.avatar.path, :width =&gt; 80, :height =&gt; 100,\n                 :crop =&gt; :thumb, :gravity =&gt; :face)        \n  - user.photos.each do |photo|\n    = cl_image_tag(photo.path, :size =&gt; '70x50', :crop =&gt; :fill, :radius =&gt; 20)\n<\/pre>\n<div>Using attachinary allows you to dynamically apply <a href=\"https:\/\/cloudinary.com\/documentation\/image_transformations\" target=\"_blank\" rel=\"noopener\">any image transformation supported by Cloudinary<\/a>. All transformed images are generated on-the-fly in the cloud and are then cached and delivered through a fast CDN.<\/div>\n<div>&nbsp;<\/div>\n<div>Last but not least &#8211; Attachinary also supports non-image <strong>raw files<\/strong>.<\/div>\n<div>&nbsp;<\/div>\n<h3>Summary&nbsp;<\/h3>\n<div>We hope that with this quick introduction, we&#8217;ve managed to pique your interest about Attachinary. Together with Cloudinary, Attachinary is really easy to use and also very powerful. Attaching images to your Rails model has never been easier.&nbsp;<\/div>\n<div>&nbsp;<\/div>\n<div>For more details, setup instructions and usage examples, check out <a href=\"https:\/\/github.com\/assembler\/attachinary\" target=\"_blank\" rel=\"noopener\"><strong>Attachinary&#8217;s page at GitHub<\/strong><\/a>.<\/div>\n<div>&nbsp;<\/div>\n<div>If you are a Rails developer, you should definitely give it a try.<\/div>\n<div>&nbsp;<\/div>\n","protected":false},"excerpt":{"rendered":"<p>When developing a website you are required for a somewhat tedious work of handling dynamically uploaded content. The constantly added content includes images uploaded by your users and content administrator, user documents and other files. &nbsp; As a developer, you&#8217;ll be responsible for adding integration of attachments to your application&#8217;s model and taking care of [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":24077,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[257],"class_list":["post-21156","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-ruby-on-rails"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Image Attachment Management Library for Ruby on Rails<\/title>\n<meta name=\"description\" content=\"Attaching images to your Rails model has never been easier. Attachinary allows you to dynamically apply any image transformation supported by Cloudinary\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Attachinary - a modern attachments solution for Ruby on Rails\" \/>\n<meta property=\"og:description\" content=\"Attaching images to your Rails model has never been easier. Attachinary allows you to dynamically apply any image transformation supported by Cloudinary\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2012-10-08T09:14:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-25T05:01:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1650586082\/83_attachinary\/83_attachinary-png?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Attachinary &#8211; a modern attachments solution for Ruby on Rails\",\"datePublished\":\"2012-10-08T09:14:10+00:00\",\"dateModified\":\"2022-04-25T05:01:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails\"},\"wordCount\":727,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA\",\"keywords\":[\"Ruby on Rails\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2012\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails\",\"url\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails\",\"name\":\"Image Attachment Management Library for Ruby on Rails\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA\",\"datePublished\":\"2012-10-08T09:14:10+00:00\",\"dateModified\":\"2022-04-25T05:01:12+00:00\",\"description\":\"Attaching images to your Rails model has never been easier. Attachinary allows you to dynamically apply any image transformation supported by Cloudinary\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Attachinary &#8211; a modern attachments solution for Ruby on Rails\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Image Attachment Management Library for Ruby on Rails","description":"Attaching images to your Rails model has never been easier. Attachinary allows you to dynamically apply any image transformation supported by Cloudinary","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails","og_locale":"en_US","og_type":"article","og_title":"Attachinary - a modern attachments solution for Ruby on Rails","og_description":"Attaching images to your Rails model has never been easier. Attachinary allows you to dynamically apply any image transformation supported by Cloudinary","og_url":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails","og_site_name":"Cloudinary Blog","article_published_time":"2012-10-08T09:14:10+00:00","article_modified_time":"2022-04-25T05:01:12+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1650586082\/83_attachinary\/83_attachinary-png?_i=AA","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails"},"author":{"name":"","@id":""},"headline":"Attachinary &#8211; a modern attachments solution for Ruby on Rails","datePublished":"2012-10-08T09:14:10+00:00","dateModified":"2022-04-25T05:01:12+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails"},"wordCount":727,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA","keywords":["Ruby on Rails"],"inLanguage":"en-US","copyrightYear":"2012","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails","url":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails","name":"Image Attachment Management Library for Ruby on Rails","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA","datePublished":"2012-10-08T09:14:10+00:00","dateModified":"2022-04-25T05:01:12+00:00","description":"Attaching images to your Rails model has never been easier. Attachinary allows you to dynamically apply any image transformation supported by Cloudinary","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/attachinary_a_modern_attachments_solution_for_ruby_on_rails#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Attachinary &#8211; a modern attachments solution for Ruby on Rails"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1650586082\/83_attachinary\/83_attachinary.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21156"}],"version-history":[{"count":1,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21156\/revisions"}],"predecessor-version":[{"id":24078,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21156\/revisions\/24078"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/24077"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}