私は次のフォームを持っています:
<%= 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
また、必要な移行もすべて用意しています。実際のアバター添付ロジックがありませんか?
設定が不足しているようです(言及していないため):
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