A.J*_*A.J 5 forms model ruby-on-rails rails-activestorage
我有以下表格:
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
它在我的edit页面上被调用:
<h1>Upload Avatar</h1>
<%= image_tag(@user.avatar) %>
<%= render 'form', user: @user %>
<hr>
Run Code Online (Sandbox Code Playgroud)
我在标题中得到了错误,但是我不确定为什么头像没有被附加到user模型上。我已经完成了所有的要求active_storage。
has_one_attached :avatar在中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
Run Code Online (Sandbox Code Playgroud)
我也有所有必要的迁移。我是否缺少实际的头像附加逻辑?
Pau*_*elo 13
如果试图在视图中显示不存在的附件,则会收到错误消息“无法将图像解析为URL:to_model委托给附件,但附件为零”:
<%= image_tag(@user.avatar) %>
Run Code Online (Sandbox Code Playgroud)
为了避免错误,您应该这样做:
<%= image_tag(@user.avatar) if @user.avatar.attached? %>
Run Code Online (Sandbox Code Playgroud)