16

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...

私の画像はバックアップされているので、実際に作成する必要はありません。しかし、私は記録が必要です。モデルのペーパークリップディレクティブにコメントすることはできません。その後、それは機能します。しかし、私は別の解決策があるかもしれないと思います。

それを達成するために従うべき別のパターンはありますか?または、画像を処理しないようにペーパークリップに指示するためのターンアラウンド?

4

2 に答える 2

41

アセット列を直接設定するのではなく、クリップを活用してルビFileオブジェクトとして設定してみてください。

Image.create({
  :id => 52, 
  :asset => File.new(Rails.root.join('path', 'to', 'somefile.jpg')),
  :product_id => 52
})
于 2013-02-25T03:27:24.620 に答える
4

ここでの他の答えは確かにほとんどの状況で機能しますが、場合によってUploadedFileFile. これは、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 ドキュメントを正しく解釈できるという利点があります。これらのドキュメントは、File オブジェクトを使用して添付すると、zip ファイルとしてアップロードされます。

これは、モデルが Microsoft Office ドキュメントを許可し、zip ファイルを許可しない場合に特に重要です。そうしないと、検証が失敗し、オブジェクトが作成されないためです。OPの状況には影響しませんでしたが、私のものには影響を与えたので、他の誰かがそれを必要とする場合に備えて、解決策を残したいと思います。

于 2015-09-30T01:57:58.650 に答える