アクティブストレージへの私の最初の進出

3975 ワード

Firtiron学校で最初の数週間を過ごした後、ほとんどはプレーンOLEボーリングターミナルで立ち往生した後、私はRailsプロジェクトがやって来た頃までにいくつかの色の準備ができていました.Aを利用することを必要とし、多くの関係を持っていて、骨董品と蚤の市場との私の関係を築きたいと思っています(私は彼らを愛していて、毎日一日中閲覧することができました)、私は異なる市場で購入される両方のフリーマーケットと骨董品を掲示するために、ユーザーに対する概念を思いつきました.これは、ユーザーが自分のコレクションをカタログし、また別のフリーマーケットが提供する必要がありますアンティークの種類でスニークピークを得るための方法です.そして、最もエキサイティングな部分-アンティークの写真が関与している!
今、私がしなければならなかったすべては、写真アップロードを私のプロジェクトに統合する方法を理解していました.私は、骨董品と市場が作成されることができて、読むことができて、更新されることができて、ユーザーによって削除されることができるように、私のモデルとコントローラ・アクションのすべてをセットするために進みました、しかし、私は何を写真を入力するためにするべきか全くわからなかったです.私の最初の試みは、私がアップロードしたい写真を指すURLのユーザー入力を取ることができる文字列のデータ型を持つ写真というタイトルのデータベースの列を作成することでした.その後、写真を表示する時間だったとき、私はそのURLを<a> タグ.しかし、ユーザーが最初にどこか他の場所をコピーして貼り付けURLを保存する必要があります..より良い方法があった!
アクティブストレージを挿入します.🙌 🙌 🙌 🙌
そして、blobs!もう少しでそれ以上.
アクティブストレージは、Amazon S 3やGoogleクラウドのようなクラウド共有サービスにファイルをアップロードし、アクティブなレコードオブジェクトにファイルを添付する方法です.このようにして、私のケースの写真は、私のモデルの別の属性であるかのように呼び出されます.antique.antique_photo <<セットは正直に簡単にすることができなかったので、魔法のような感じ!私はすべてのRailsプロジェクトに写真のアップロード機能を追加したい人を奨励するのでcheck it out しかし、私はファイルが保存される方法の簡単な概要を書きたかったです.
アクティブなストレージは、データベース内の2つのテーブルを作成することによって動作します.
ActiveAdd StorageHelbテーブルでは、各行はBLOBと呼ばれ、ファイルの名前、content typeなどのアップロードされたファイルに関する情報と詳細が含まれます.
ActiveRound StorageRangeアタッチメントは、3つのものを格納する多型結合テーブルです.
  • BLObRIGHT ID ( ActiveRound StorageCount Blobテーブルの選択したファイルの行ID )
  • RecordRunge型(これは写真を持っているモデルです)
  • RecordRound id (これは写真が結び付けられるモデルの特定のインスタンスのIDです).
  • アクティブなストレージを設定するには
    ファーストラン$ bin/rails active-storage:install それから$ bin/rails db:migrate テーブルを追加するには
    その後、内部config/storage.yml アクティブなストレージサービスを宣言する-どのファイルを格納するサービスを使用します.私の場合、これはただのプロジェクトなので、ローカルディスクを使用しますが、ドキュメントは他のサービスを参照します.
    local:
      service: Disk
      root: <%= Rails.root.join("storage") %>
    
    内部config/environments/development.rb , ローカルディスクを使用するアクティブなストレージを教えてください
    config.active_storage.service = :local
    
    これはローカルストレージ用に設定されたファイルです.残っている全てはMVC構造にそれを実装しています.
    写真を持っているモデルでは、いずれかの関係を宣言します.
    class Antique < ApplicationRecord
      has_one_attached :antique_photo
    end  
    
    class Market < ApplicationRecord
      has_many_attached :market_photos
    end  
    
    それぞれのコントローラに:antique_photo and :market_photos 強力なparamsプライベートメソッドに.
    ユーザーがファイルを選択してアップロードする機能を追加するには、フォーム内のフォームを更新します.
    <%= form_with model: @antique, local: true do |f| %>
        <%= f.label :antique_photo, "Add a photo of your antique: " %>
        <%= f.file_field :antique_photo %>
        .....
        <%= f.submit "add antique", :class => "button_submit sage" %>
    <% end %>
    
    そして、それ!前述のように、写真は@antique.antique_photo として使用すると、ブラウザでレンダリング<img><%= image_tag @antique.antique_photo %></img> .
    それはここで注意してくださいあなたが好きな名前であなたの写真を参照することができます(アバター、:画像:ProfileCount画像など)だけで、モデル、ビュー、およびコントローラの同じ方法を参照することを確認します.
    アクティブなストレージを使用してすべてのケースで写真を追加する最良の方法ではないかもしれないが、それは私の最初の進出のために働いて、私は私のユーザーが写真でアンティークコレクションを公開することができます幸せです!
    ドキュメントは以下の通りです.https://edgeguides.rubyonrails.org/active_storage_overview.html
    これは非常に有用で、より詳細な概観です.https://pragmaticstudio.com/tutorials/using-active-storage-in-rails
    そして私のプロジェクトですhttps://github.com/madelinemc/oui-flea-antiquerie