NoMethodError(#<Upload:0x007f8b13194b50> 的未定义方法 `address='

NoMethodError (undefined method `address=' for #<Upload:0x007f8b13194b50>

我正在开发一个用户可以从硬盘上传图片的应用程序。我正在使用回形针将这些图片保存到 Amazon S3。我还保存了用户上传图片时每张图片所在位置的经度和纬度。我正在用地理编码器来做这件事。一切正常,自从我上次尝试上传一张新图片后,它让我返回以下错误:

NoMethodError(未定义方法address=' for #<Upload:0x007f8b13194b50>): app/controllers/uploads_controller.rb:16:in创建'

我找不到问题,我正在附加我为此使用的控制器和模型。

控制器

class UploadsController < ApplicationController

  def index

    @uploads = Upload.near([request.location.latitude,    request.location.longitude], 1)

    # render json: Upload.all.to_json(:methods => [:image_url])
    render json: @uploads.to_json(:methods => [:image_url])
  end

  def new
    @upload = Upload.new
  end

  def create
    @upload = Upload.create(upload_params)
    if @upload.save
      render json: { message: "success" }, :status => 200
    else
      #need to send an error header, otherwise Dropzone
      #  will not interpret the response as an error:
      render json: { error: @upload.errors.full_messages.join(',')}, :status => 400
    end         
  end

  private
  def upload_params
    params.require(:upload).permit(:image, :latitude, :longitude)
  end
end

型号

class Upload < ActiveRecord::Base
    # geocoded_by :ip_address,
    # :latitude => :lat, :longitude => :lon
    # after_validation :geocode

    # geocoded_by :address
    # after_validation :geocode

    reverse_geocoded_by :latitude, :longitude
    after_validation :reverse_geocode  # auto-fetch address

    has_attached_file :image, :styles => { :medium => "300x300>",:thumb => "100x100>" }

    validates_attachment    :image, 
                :presence => true,
                :content_type => { :content_type => /\Aimage\/.*\Z/ },
                :size => { :less_than => 2.megabyte }

    def image_url
    image.url
    end
end

也许您需要重新启动您的 Rails 服务器,或者您实际上并没有粘贴您 运行.

的代码

你控制器的第 16 行是 Upload.create(upload_params) 行,根据你在模型中注释掉的 geocoded_by :address 代码,我猜你在某个时候有 :address 作为您允许的上传参数之一,如果它仍在 upload_params 和您的表单中,那么这将解释为什么 address=Upload.create

中被调用