如何使用Rails3.2.6的send_data在浏览器中显示一张图片Active Record?

How to use Rails3.2.6's send_data to display an image Active Record in the browser?

SO里有几个关于send_data的问题,但是答案解决不了我的

我正在练习Agile Web Development with Rails 4第21章的观点,在浏览器中使用send_data显示一张图片Active Record时,没有得到p351的结果,而是相对于send_data 在 development.log 中:

NoMethodError (undefined method `data' for nil:NilClass):
app/controllers/pictures_controller.rb:17:in `picture'

但是,我可以通过 send_file 和相同的 data 得到正确的结果。

我完成的事情如下: (1)我的环境是:ruby-1.9.3,rails3.2.6 (2) table 文件: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 的定义方法。所以它抛出这个错误。我在社区中看到很多用户 post 这个错误。因此,这仅意味着您尝试使用该方法的对象由于某种原因是 nil。所以首先检查它为什么是 nil。可能有一些原因,例如打字错误或发现一些错误的值或其他任何原因。你的问题的答案是纠正一个错字:

send_data(@pciture.data

send_data(@picture.data