2009-08-27 168 views
2

是否有一种使用ActiveRecord的create方法加载二进制列的简单(或普遍接受)的方法?通过ActiveRecord从文件加载二进制数据创建

例如,我想要做的就是类似这样的东西:

MyTableObject.create :name => "Test", :image => File.read("PathToMyFile.jpg") 
+0

这不行吗? – 2009-08-27 19:52:37

+0

它似乎不是......除非我只是做错了。 create方法返回true,我确实在DB中看到记录;但是,图像不可恢复,报告的文件大小不匹配。 – jerhinesmith 2009-08-27 20:51:08

回答

1

我能得到这个工作。而不是做:

MyTableObject.create(
    :name => "Test", 
    :image => File.read("PathToMyFile.jpg") 
) 

插入一条记录到数据库中,但没有文件

MyTableObject.create(
    :name => "Test", 
    :image => File.open("PathToMyFile.jpg", 'rb').read 
) 

的正确的二进制表示似乎做的伎俩。

+0

看起来像Windows中的问题 - 在Windows中(但不是像Linux或OSX那样的unix-like)二进制文件和文本文件的处理方式不同,因此需要明确的“rb”模式参数来正确加载文件。 – 2012-02-14 20:47:05

+0

不是仅限Windows的问题。我和UNIX系统(准确地说,XUBUNTU)有同样的问题。推荐的解决方案也适用于我的系统。 – 2015-07-09 20:21:53