2013-02-24 96 views
11

让我们说,我有我的seeds.rb文件中的以下条目:seeds.rb内使用回形针

Image.create(:id => 52, :asset_file_name => "somefile.jpg", :asset_file_size => 101668, :asset_content_type => "image/jpeg", :product_id => 52) 

如果我种子,它会尝试指定的图像处理,我得到这个错误:

No such file or directory - {file path} etc... 

我的图像已备份,所以我不需要创建它们;但我需要记录。我无法评论我的模型中的回形针指令;那么它的工作;但我想可能有另一种解决方案。

为了实现它,还有其他的模式吗?或者让回形针告诉回形针不要处理图像?

回答

37

不是直接设置资产列,而是尝试利用回形针并将其设置为ruby File对象。

Image.create({ 
    :id => 52, 
    :asset => File.new(Rails.root.join('path', 'to', 'somefile.jpg')), 
    :product_id => 52 
}) 
+3

我推荐使用'File.join'而不是内插字符串。 'File.join(Rails.root,'path','to','somefile.jpg')' – Aleksey 2016-07-06 17:27:12

1

对方回答肯定在这里工作在大多数情况下,但在某些情况下,它可能会更好,但提供一个UploadedFile而非File。这更接近地模仿Paperclip从表单接收的内容并提供一些附加功能。

image_path = "#{Rails.root}/path/to/image_file.extension" 
image_file = File.new(image_path) 

Image.create(
    :id => 52, 
    :product_id => 52, 
    :asset => ActionDispatch::Http::UploadedFile.new(
    :filename => File.basename(image_file), 
    :tempfile => image_file, 
    # detect the image's mime type with MIME if you can't provide it yourself. 
    :type => MIME::Types.type_for(image_path).first.content_type 
) 
) 

尽管此代码是稍微复杂一些,它有,如果使用文件对象连接,将被上传为拉链的正确解释与.DOCX,.PPTX或.xlsx扩展Microsoft Office文档的好处文件。

如果您的模型允许Microsoft Office文档但不允许使用zip文件,那么这尤其重要,否则验证将失败并且您的对象将不会创建。它不会影响OP的情况,但它影响到我的,所以我希望离开我的解决方案,以防其他人需要它。

+1

这是更好的解决方案来处理更多的文件类型。这也适用于字体。 – 2016-05-13 07:44:56