Rails 未初始化常量错误 mount_uploader

Rails uninitialized constant error with mount_uploader

我正在使用 Rails 脚手架 创建一个名为 Movies 的简单模型,其中包含电影的 namedirectorsynopsisposter.

我正在使用 Carrierwave gem 上传海报图片。当我第一次启动 rails 服务器时,我收到以下消息:

NameError in MoviesController#new

uninitialized constant Movie::PosterUploader

错误屏幕显示的提取源是我的 models/movie.rb 文件:

class Movie < ApplicationRecord
  mount_uploader :poster, PosterUploader
end

这是我的电影控制器:

class MoviesController < ApplicationController
  before_action :set_movie, only: [:show, :edit, :update, :destroy]

  # GET /movies
  # GET /movies.json
  def index
    @movies = Movie.all
 end

  # GET /movies/1
  # GET /movies/1.json
  def show
  end

   # GET /movies/new
  def new
    @movie = Movie.new
  end

  # GET /movies/1/edit
  def edit
  end

  # POST /movies
  # POST /movies.json
  def create
    @movie = Movie.new(movie_params)

    respond_to do |format|
      if @movie.save
        format.html { redirect_to @movie, notice: 'Movie was successfully 
created.' }
        format.json { render :show, status: :created, location: @movie }
      else
        format.html { render :new }
        format.json { render json: @movie.errors, status: 
:unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /movies/1
  # PATCH/PUT /movies/1.json
  def update
    respond_to do |format|
      if @movie.update(movie_params)
        format.html { redirect_to @movie, notice: 'Movie was successfully 
updated.' }
         format.json { render :show, status: :ok, location: @movie }
      else
        format.html { render :edit }
        format.json { render json: @movie.errors, status: 
:unprocessable_entity }
      end
    end
  end

  # DELETE /movies/1
  # DELETE /movies/1.json
  def destroy
    @movie.destroy
    respond_to do |format|
      format.html { redirect_to movies_url, notice: 'Movie was successfully 
destroyed.' }
       format.json { head :no_content }
    end
   end

   private
     # Use callbacks to share common setup or constraints between actions.
     def set_movie
      @movie = Movie.find(params[:id])
     end

    # Never trust parameters from the scary internet, only allow the white 
list through.
    def movie_params
      params.require(:movie).permit(:title, :director, :synopsis, :poster)
    end
end

当我使用 Rails 脚手架创建模型时,我将海报制作成一个字符串,但将其更改为部分电影形式部分中的文件:

<div class="field">
    <%= form.label :poster %>
    <%= form.file_field :poster, id: :movie_poster %>
  </div>

这是我的 routes 文件,以防我在那里出错:

Rails.application.routes.draw do
  resources :movies
  root 'movies#index'
  # For details on the DSL available within this file, see 
http://guides.rubyonrails.org/routing.html
end

如有任何帮助,我们将不胜感激。

uninitialized constant Movie::PosterUploader

您应该生成 上传器。做

rails generate uploader Poster

哪个应该生成文件

app/uploaders/poster_uploader.rb