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
中被调用
我正在开发一个用户可以从硬盘上传图片的应用程序。我正在使用回形针将这些图片保存到 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