web-dev-qa-db-ja.com

画像をURLに解決できません:to_modelが添付ファイルに委任されましたが、添付ファイルはnil Rails 5.2です

私は次のフォームを持っています:

<%= form_with(model: user, local: true) do |form| %>
  <% if user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.file_field :avatar %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

私のeditページで呼び出されています:

<h1>Upload Avatar</h1>
  <%= image_tag(@user.avatar) %>
  <%= render 'form', user: @user %>
<hr>

タイトルにエラーが表示されますが、アバターがuserモデルにアタッチされていない理由がわかりません。 active_storage

has_one_attached :avatar in user model

user controller

  def identity_params
    params.permit(:email_confirmation, :password, :password_confirmation, :avatar).to_h.symbolize_keys.tap do |params|
      params[:email] = params[:email_confirmation]
    end 
  end 

また、必要な移行もすべて用意しています。実際のアバター添付ロジックがありませんか?

6
A.J

設定が不足しているようです(言及していないため):

Active Storageサービスはconfig/storage.ymlで宣言する必要があります

ドキュメントの例:

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

Amazon:
  service: S3
  access_key_id: ""
  secret_access_key: ""

また、Rails.application.config.active_storage.serviceを設定して、使用するサービスをActive Storageに通知する必要があります

各環境では異なるサービスを使用する可能性が高いため、環境ごとにこれを行うことをお勧めします。前の例のディスクサービスを開発環境で使用するには、config/environments/development.rbに以下を追加します。

# Store files locally.
config.active_storage.service = :local
2
Paulo Belo