"неопределенный метод` имя_модели 'для NilClass: Class "с CarrierWave - PullRequest
4 голосов
/ 23 июня 2011

Сейчас я использую CarrierWave для загрузки фотографий на мой сайт. Проблема в том, что при открытии фотографии / загрузки (upload.html.erb) мне показывается эта ошибка:

неопределенный метод `имя_модели 'для NilClass: Класс

Вокруг строки 1 моего upload.html.erb:

<%= 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 ]

3 голосов
/ 23 июня 2011

Возможно, проблема связана с тем, что вы установили загрузчик как :photos, но поле формы равно :photo. Попробуйте сделать это совпадают.

1 голос
/ 28 июля 2013

Я отвечаю на него поздно, так как я вижу, что в контроллере фотографий нет действия загрузки, соответствующего шаблону upload.html.erb

Я предлагаю вам переименовать его в new.html.erb и попытаться получить доступ к URL 'photos / new'

1 голос
/ 26 февраля 2012

Проблема может быть решена путем создания объекта фото объекта.Я думаю, что это должно решить проблему.

0 голосов
/ 13 июня 2018

У меня была такая же проблема, и поиск заставил меня ответить https://stackoverflow.com/a/21992187/3280686

Вы должны добавить это на Class PhotosUploader

include CarrierWaveDirect::Uploader
include ActiveModel::Conversion
extend ActiveModel::Naming
...