【发布时间】:2020-04-21 18:27:24
【问题描述】:
嗨,我在我的项目中添加了carrierwave gem 并按照说明进行操作,但我收到了这个错误-undefined method 'avatar' for nil:NilClass。谁能知道为什么我无法上传和查看上传的文件?
1.gem install carrierwave
2.gem 'carrierwave', '~> 2.0'
3.rails generate uploader Avatar
4.rails g migration add_avatar_to_project_sites avatar:string
project_sites_controller.rb
def index
@project_sites = current_user.project_sites.order("created_at DESC").paginate(page: params[:page], per_page: 10)
end
def create
@project_site = current_user.project_sites.build(project_site_params)
respond_to do |format|
if @project_site.save
format.html { redirect_to @project_site, notice: 'Attendance uploaded successfully' }
format.json { render :show, status: :created, location: @project_site }
else
format.html { render :new }
format.json { render json: @project_site.errors, status: :unprocessable_entity }
end
end
end
def project_site_params
params.require(:project_site).permit(:name, :file, :attendance_month, avatar: [])
end
project_site form.html.erb
<div class="field">
<%= form.label :avatar %>
<%= form.file_field :avatar %>
</div>
模型 project_site.rb
mount_uploader :avatar, AvatarUploader
avatar_uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
project_site index.html.erb
<%= image_tag @project_site.avatar.url %>
【问题讨论】:
-
你能确保
@project_site不为零,因为这就是错误所说的。 -
嘿,当我将 @project_site 更改为 @project_sites 时,我收到此错误 - 未定义方法 `avatar' for #<:activerecord_associationrelation:0x00007f0b14856f08>
-
你必须循环
@project_sites或者你可以做@project_sites.first如果你只需要测试载波是否工作。
标签: ruby-on-rails ruby rubygems ruby-on-rails-5 carrierwave