4

现在我正在使用 CarrierWave 将照片上传到我的网站。问题是当我打开照片/上传 (upload.html.erb) 时显示此错误:

NilClass:Class 的未定义方法“model_name”

在我的 upload.html.erb 的第 1 行周围:

<%= form_for @photos, :html => {:multipart => true} do |f| %>  
  <%= f.error_messages %>  
  <%= f.hidden_field :gallery_id %>  
  <p>  
    <%= f.label :name %><br />  
    <%= f.text_field :name %>  
  </p>  
  <p>  
    <%= f.file_field :photo %>  
  </p>  
  <p><%= f.submit %></p>  
<% end %>  

我不太明白这一点,因为我认为我的模型(photos.rb)没有错误:

class Photos < ActiveRecord::Base
  attr_accessor :gallery_id, :name, :photo
  belongs_to :gallery
  mount_uploader :photos, PhotosUploader
end

在我的 photos_controller.rb 我有这个:

class PhotosController < ApplicationController
  def new
    @photos = Photos.new(:gallery_id => params[:gallery_id])
  end

  def create
    @photos = Photos.new(params[:photos])
    if @photos.save
      flash[:notice] = "Successfully created Photos."
    else
      render :action => 'new'
    end
  end

  def edit
    @photos = Photos.find(params[:id])
  end
  def update
    @photos = Photos.find(params[:id])
    if @photos.update_attributes(params[:photos])
      flash[:notice] = "Successfully updated Photos."
    else
      render :action => 'edit'
    end
  end

  def destroy
    @photos = Photos.find(params[:id])
    @photos.destroy
    flash[:notice] = "Successfully destroyed Photos."
  end
end

这是我的photos_uploader.rb:

class PhotosUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  storage :file
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end  
  version :thumb do
    process :scale => [180, 180]
  end
end

问候,伊万

4

4 回答 4

3

问题可能与您已将上传程序安装为:photos,但表单字段为:photo. 尝试使这些匹配。

于 2011-06-23T19:15:04.223 回答
1

该问题可以通过实例化对象照片对象来解决。我认为这应该可以解决问题。

于 2012-02-26T03:15:42.697 回答
1

我迟到了,因为可以看到照片控制器中没有与模板upload.html.erb匹配的上传操作

我建议您将其重命名为 new.html.erb 并尝试访问 url 'photos/new'

于 2013-07-27T20:48:21.453 回答
0

我遇到了同样的问题,搜索让我得到了这个答案 https://stackoverflow.com/a/21992187/3280686

您需要将此添加到您的Class PhotosUploader

include CarrierWaveDirect::Uploader
include ActiveModel::Conversion
extend ActiveModel::Naming
于 2018-06-13T20:17:10.533 回答