Ruby on rails 4 升级到rails 4后有多个关联的NameError Uninitialized常量

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

我试图将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
  @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