我正在运行rails 3和paperclip 2.3.4。在OS X的开发中,每件事情都运行得很好,但生产中存在一些我无法弄清楚的问题。如果有人有任何建议,请告诉我。
我使用Flash BTW上传文件。就像我说当地的发展很有效。
我检查了生产日志,看起来POST正好发生了。
Started POST "/addimage" for 10.0.136.119 at 2011-01-13 19:49:09 +0000
Processing by BowlsController#create as HTML
Parameters: {"Filename"=>"IMG_0585.JPG", "fbid"=>"123456789", "Filedata"=>#<ActionDispatch::Http::UploadedFile:0x000000054afdf8 @original_filename="IMG_0585.JPG", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"Filedata\"; filename=\"IMG_0585.JPG\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/tmp/RackMultipart20110113-23741-bhze8q>>, "Upload"=>"Submit Query"}
Completed 200 OK in 64ms (Views: 0.4ms | ActiveRecord: 0.9ms)
以下是我正在调用的rails中的操作
def create
@user = User.find_by_fbid(params[:fbid])
if @user.nil?
#create user and register if user does not exist
@user = User.new( :fbid => params[:fbid] )
@user.save
end
if params[:Filedata]
@image = @user.images.build()
@image.swfupload_file = params[:Filedata]
if @image.save
render :json => { :data => @image, :success => true }
else
render :json => { :info => "error", :success => false }
end
else
@image = Image.new params[:img]
if @image.save
render :json => { :data => @bowl, :success => true }
else
render :json => { :info => "error", :success => false }
end
end
end
end
基本上用户可以有很多图像,所以我必须确保用户存在。如果它们不存在,我首先创建一个新用户。
我还有另一种方法可以让我抓住用户上传的最后一张图片的路径,这也是生产中的错误。
def last_img
@user = User.find_by_fbid(params[:fbid])
if @user.nil?
render :json => { :error => "no bowls for this user" }
else
bowl = @user.images.first
render :json => { :img_path => image.img.url}
end
end
我得到的错误如下 ImagesController#last_image
中的NoMethodError未定义的方法`img'代表nil:NilClass
答案 0 :(得分:0)
我觉得你的代码有点迷失。
如果它确实是您的实时代码的副本,则image.img
可能会在#last_img
中抛出异常,因为它可能未初始化(至少在您提供的代码中没有)。但它会引发一种不同的例外而不是零:NilClass
如果它是一个拼写错误并且你@image.img
那么问题是相同的 - 你的控制器的工作流程是什么 - 如果它被调用那么它真的会抛出nil:NilClass因为没有@图片在#last_img
还有一件事 - 你在那里初始化局部变量bowl
而没有使用它?
最后一个,现在在#create
- @bowl来自哪里?从提供的代码开始,它应始终为nil
。