【问题标题】:error undefined method `avatar' for nil:NilClassnil:NilClass 的错误未定义方法“头像”
【发布时间】: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


【解决方案1】:

这是你应该做的

<% @project_sites.each do |project_site| %>
  <% if project_site.avatar %>
    <%= image_tag project_site.avatar.url %>
  <% else %>
    No Image Present
  <% end %>
<% end %>

您也可以提供默认图像来处理此问题。

【讨论】:

  • 那是因为您没有 project_sites 的图片。
  • 现在出现错误 - 提供了 Nil 位置。无法构建 URI。
  • 我从 form.html.erb 添加了图片
  • 您对rails 的基础知识不清楚,您应该在此处查看railstutorial.org 清除它们。
  • 兄弟在控制器中传递而不是“头像:[]”我传递了 :avatar 并且它解决了问题并且 在视图中。
【解决方案2】:

你应该像这样使用&lt;%= image_tag(@user.avatar_url) if @user.avatar? %&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 2012-12-27
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多