Rails 未初始化常量错误 mount_uploader
Rails uninitialized constant error with mount_uploader
我正在使用 Rails 脚手架 创建一个名为 Movies
的简单模型,其中包含电影的 name
、director
、synopsis
和 poster
.
我正在使用 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
我正在使用 Rails 脚手架 创建一个名为 Movies
的简单模型,其中包含电影的 name
、director
、synopsis
和 poster
.
我正在使用 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