Ruby on rails 4 升级到rails 4后有多个关联的NameError Uninitialized常量
我试图将rails应用程序升级到4.0.1,但我的控制器中有一个错误,错误代码为@gallery.pictures.build:Ruby on rails 4 升级到rails 4后有多个关联的NameError Uninitialized常量,ruby-on-rails-4,Ruby On Rails 4,我试图将rails应用程序升级到4.0.1,但我的控制器中有一个错误,错误代码为@gallery.pictures.build: NameError in GalleriesController#new uninitialized constant Gallery::Picture @gallery = Gallery.new @gallery.token = @gallery.generate_token @picture = @gallery.pictures.build
NameError in GalleriesController#new
uninitialized constant Gallery::Picture
@gallery = Gallery.new
@gallery.token = @gallery.generate_token
@picture = @gallery.pictures.build
@pictures = []
除了使用强参数外,我没有更改任何代码,无法找出代码崩溃的原因。任何帮助都将不胜感激
如果有助于查找错误,以下是更多代码:
class GalleriesController < ApplicationController
# GET /galleries
# GET /galleries.json
def index
@galleries = Gallery.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @galleries }
end
end
# GET /galleries/1
# GET /galleries/1.json
def show
@gallery = Gallery.find(params[:id])
@picture = @gallery.pictures.build
@pictures = Picture.find(:all, :conditions => [ 'gallery_id = ?', @gallery.id ])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @gallery }
end
end
# GET /galleries/new
# GET /galleries/new.json
def new
@gallery = Gallery.new
@gallery.token = @gallery.generate_token
@picture = @gallery.pictures.build
@pictures = []
respond_to do |format|
format.html # new.html.erb
format.json { render json: @gallery }
end
end
# GET /galleries/1/edit
def edit
@gallery = Gallery.find(params[:id])
@picture = @gallery.pictures.build
@pictures = []
end
# POST /galleries
# POST /galleries.json
def create
@gallery = Gallery.new(gallery_params)
@pictures = Picture.where(:gallery_token => @gallery.token)
@gallery.pictures << @pictures
respond_to do |format|
if @gallery.save
format.html { redirect_to @gallery, notice: 'Gallery was successfully created.' }
format.json { render json: @gallery, status: :created, location: @gallery }
else
format.html { render action: "new" }
format.json { render json: @gallery.errors, status: :unprocessable_entity }
end
end
end
# PUT /galleries/1
# PUT /galleries/1.json
def update
@gallery = Gallery.find(params[:id])
respond_to do |format|
if @gallery.update_attributes(gallery_params)
format.html { redirect_to @gallery, notice: 'Gallery was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @gallery.errors, status: :unprocessable_entity }
end
end
end
# DELETE /galleries/1
# DELETE /galleries/1.json
def destroy
@gallery = Gallery.find(params[:id])
@gallery.destroy
respond_to do |format|
format.html { redirect_to galleries_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_gallery
@project = @label.projects.find(params[:id])
end
# Use this method to whitelist the permissible parameters. Example:
# params.require(:person).permit(:name, :age)
#
# Also, you can specialize this method with per-user checking of permissible
# attributes.
def gallery_params
params.require(:gallery).permit(:cover, :description, :name, :token)
end
end
类库 has_many :pictures, :dependent => :destroy
def generate_token
self.token = loop do
random_token = SecureRandom.urlsafe_base64
break random_token unless Gallery.where(token: random_token).exists?
end
end
end
类图片 belongs_to :gallery
mount_uploader :image, ImageUploader
after_update :crop_image
def to_jq_upload
{
"name" => read_attribute(:image),
"size" => image.size,
"url" => image.url,
"thumbnail_url" => image.thumb.url,
"delete_url" => id,
"picture_id" => id,
"delete_type" => "DELETE"
}
end
def crop_image
image.recreate_versions! if crop_x.present?
current_version = self.image.current_path
large_version = "#{Rails.root}/public" + self.image.versions[:large].to_s
FileUtils.rm(current_version)
FileUtils.cp(large_version, current_version)
end
end
在rails控制台中执行Gallery.new.pictures.build时会发生什么?感谢您让我使用控制台进行调试!事实证明,图片模型使用的uploader类中不推荐使用的“include Sprockets::Helpers::RailsHelper”存在问题。谢谢你的努力,我很抱歉成为这样一个笨蛋。。。
belongs_to :gallery
mount_uploader :image, ImageUploader
after_update :crop_image
def to_jq_upload
{
"name" => read_attribute(:image),
"size" => image.size,
"url" => image.url,
"thumbnail_url" => image.thumb.url,
"delete_url" => id,
"picture_id" => id,
"delete_type" => "DELETE"
}
end
def crop_image
image.recreate_versions! if crop_x.present?
current_version = self.image.current_path
large_version = "#{Rails.root}/public" + self.image.versions[:large].to_s
FileUtils.rm(current_version)
FileUtils.cp(large_version, current_version)
end
end