如何解决头像图片主动存储Rails 6
我正在尝试设置活动存储以在新用户注册时上传头像。 我已经跑了:
rails active_storage:install 导轨数据库:迁移
这是一个没有设计的简单应用。
我已将“has_one_attached”放入模型/user.rb
class User < ApplicationRecord
before_save { self.username = username.downcase }
has_one_attached :avatar
end
我在用户控制器的强参数中加入了“:avatar”:
class UsersController < ApplicationController
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
@user.avatar.attach(params[:avatar])
if @user.update(user_params)
flash[:notice] = "Your account information was succesfully updated"
redirect_to user_path
else
render 'edit'
end
end
def create
@user = User.new(user_params)
@user.avatar.attach(params[:avatar])
if @user.save
flash[:notice] = "Welcome to Edx Wallet"
redirect_to user_path(@user)
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:username,:avatar)
end
最后,我将以下代码放入我的导航视图中,以便在没有用户登录的情况下使用通用头像
<%= image_tag user_avatar(current_user,40),class: "lg:ml-4 mt-1 lg:mb-0 mb-1 ml-5 pointer-cursor hover:bg-gray-50"%>
在我的 application_helper 中:
def user_avatar(user,size=40)
if user.avatar.attached?
user.avatar.variant(resize: "#{size}x#{size}!")
else
'https://randomuser.me/api/portraits/women/49.jpg'
end
end
但是当我尝试显示时出现错误:
显示 /home/edxco/Documents/Microverse/financial_app/app/views/layouts/_nav.html.erb 其中第 48 行提出:
nil:NilClass 的未定义方法 `avatar'
> def user_avatar(user,size=40)
> if user.avatar.attached?
> user.avatar.variant(resize: "#{size}x#{size}!")
> else
> 'https://randomuser.me/api/portraits/women/49.jpg'
> end
> end
我做错了什么?请帮帮我好吗?
解决方法
您的用户未定义。在您的辅助方法中,尝试使用您在控制器中设置的实例变量 @user
而不是 user
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。