From dfe534e01e4985b5aafeadae6cb9eaca88055b94 Mon Sep 17 00:00:00 2001 From: Jeffrey Guenther Date: Wed, 19 Jul 2017 10:26:55 -0700 Subject: [PATCH 1/3] Provides a rough draft of a guide This is a first draft of the guide built from content in the readme and follows the format of other rails guides. It's meant to be a starting point for further development as Active Storage is developed. --- guide/active_storage.md | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 guide/active_storage.md diff --git a/guide/active_storage.md b/guide/active_storage.md new file mode 100644 index 0000000..4a2966e --- /dev/null +++ b/guide/active_storage.md @@ -0,0 +1,91 @@ +# Active Storage Basics + +This guide provides you with all you need to store attachments on your models. + +After reading this guide, you will know: + +* How to attach files to models. +* How to upload files directly to cloud storage. +* How add a service for a new cloud service. + +-------------------------------------------------------------------------------- + +## Introduction + +Active Storage makes it simple to upload and reference files in cloud services, +like Amazon S3 or Google Cloud Storage, and attach those files to Active +Records. It also provides a disk service for testing or local deployments, but +the focus is on cloud storage. + +## Compared to other storage solutions + +A key difference to how Active Storage works compared to other attachment +solutions in Rails is through the use of built-in +[Blob](https://github.com/rails/activestorage/blob/master/lib/active_storage/blob.rb) +and +[Attachment](https://github.com/rails/activestorage/blob/master/lib/active_storage/attachment.rb) +models (backed by Active Record). This means existing application models do not +need to be modified with additional columns to associate with files. Active +Storage uses GlobalID to provide polymorphic associations via the join model of +`Attachment`, which then connects to the actual `Blob`. + +These `Blob` models are intended to be immutable in spirit. One file, one blob. +You can associate the same blob with multiple application models as well. And if +you want to do transformations of a given `Blob`, the idea is that you'll simply +create a new one, rather than attempt to mutate the existing (though of course +you can delete that later if you don't need it). + +## Add an Attachment + +One attachment: + +```ruby +class User < ApplicationRecord + has_one_attached :avatar +end + +user.avatar.attach io: File.open("~/face.jpg"), filename: "avatar.jpg", content_type: "image/jpg" +user.avatar.exist? # => true + +user.avatar.purge +user.avatar.exist? # => false + +user.avatar.url(expires_in: 5.minutes) # => /rails/blobs/ + +class AvatarsController < ApplicationController + def update + Current.user.avatar.attach(params.require(:avatar)) + redirect_to Current.user + end +end +``` + +## Add Multiple Attachments + +Many attachments: + +```ruby +class Message < ApplicationRecord + has_many_attached :images +end +``` + +```erb +<%= form_with model: @message do |form| %> + <%= form.text_field :title, placeholder: "Title" %>
+ <%= form.text_area :content %>

+ + <%= form.file_field :images, multiple: true %>
+ <%= form.submit %> +<% end %> +``` + +```ruby +class MessagesController < ApplicationController + def create + message = Message.create! params.require(:message).permit(:title, :content) + message.images.attach(params[:message][:images]) + redirect_to message + end +end +``` From cf8a18464e9bb3ed42d38473b75ccd143480052d Mon Sep 17 00:00:00 2001 From: Jeffrey Guenther Date: Wed, 19 Jul 2017 10:42:57 -0700 Subject: [PATCH 2/3] Extends guide outline to match working going on in the repo --- guide/active_storage.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/guide/active_storage.md b/guide/active_storage.md index 4a2966e..9761653 100644 --- a/guide/active_storage.md +++ b/guide/active_storage.md @@ -6,6 +6,7 @@ After reading this guide, you will know: * How to attach files to models. * How to upload files directly to cloud storage. +* How to retrieve variants on attachment * How add a service for a new cloud service. -------------------------------------------------------------------------------- @@ -89,3 +90,7 @@ class MessagesController < ApplicationController end end ``` + +## Direct Uploads +## Retrieve Variants of an Attachment +## Add Support for Cloud Service From 1c8e8151682c729b74fcb18badfebd93e51a5496 Mon Sep 17 00:00:00 2001 From: Jeffrey Guenther Date: Wed, 19 Jul 2017 10:43:47 -0700 Subject: [PATCH 3/3] Add missed period --- guide/active_storage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guide/active_storage.md b/guide/active_storage.md index 9761653..3d96b16 100644 --- a/guide/active_storage.md +++ b/guide/active_storage.md @@ -6,7 +6,7 @@ After reading this guide, you will know: * How to attach files to models. * How to upload files directly to cloud storage. -* How to retrieve variants on attachment +* How to retrieve variants on attachment. * How add a service for a new cloud service. --------------------------------------------------------------------------------