SO中有几个关于send_data
的问题,但答案无法解决我的问题。
我正在练习第21章关于使用Rails4进行敏捷Web开发的观点,当使用send_data
在浏览器中显示图像Active Record时,我没有得到p351的结果,而是在Development.log中出现了一个与send_data
相关的错误:
NoMethodError (undefined method `data' for nil:NilClass):
app/controllers/pictures_controller.rb:17:in `picture'
但是,我可以用相同的data
通过send_file
得到正确的结果。
我完成的事情如下:(1) 我的环境是:ruby-1.9.3,rails 3.2.6(2) 表文件:app/db/migrate/xxx_create_pictures.rb
create_table :pictures do |t|
t.string :name
t.string :content_type
t.binary :data
end
这里,t.binary :data
用于存储图像的数据(3) 控制器文件:app/controllers/pictures_controller.rb
:
def picture
@picture = Picture.find(params[:id])
send_data(@pciture.data,
filename: @picture.name,
type: @picture.content_type,
disposition: "inline")
end
(4) 访问http://localhost:3000/pictures/1
时,浏览器中可以显示文件名和类型,但不能显示图像,并出现错误如上所述。此外,如果我按如下方式使用send_file
,则可以显示图像:
file = "my_file.png"
File.open(file, "wb"){ |f| f << @picture.data }
send_file( file, :type => 'image/png' )
当然,send_file
有一个不愉快的结果,它将保存一个不必要的文件my_file.png
我不知道我为什么想念什么?任何建议都将不胜感激!
编辑:很抱歉问这样一个问题。正如@Deep所说,我写错了一个单词pciture
!
undefined method 'data' for nil:NilClass
总是意味着它正在尝试执行nil.data
,这不是为nil
定义的方法。所以它抛出了这个错误。我在社区中看到许多用户发布了这个错误。因此,这只是意味着,由于某种原因,您试图在其上使用该方法的对象是nil
。因此,首先检查它为什么是nil
。可能有一些原因,比如打字错误或发现了一些错误的值或其他什么。你的问题的答案是纠正一个拼写错误:
send_data(@pciture.data
至
send_data(@picture.data