如何使用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
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