0

CarrierWaveを使用してファイルのアップロードを処理しているRailsアプリにCSVファイルをインポートしようとしています。私はCSVgemを使用しており、シードデータを介してRailsデータベースにデータを入力しています。

私が抱えている問題は、インポートがデータベースの画像フィールドに入力されないことです。画像列は、ファイル名を保持する文字列です。'this-is-my-photo.jpg'。

次の列を持つデータベーステーブルがあります。

# ProductImage model, product_image table

id |     image    |     tile      | product_id | created_at | updated_at 
--------------------------------------------------------------------------
 1 | image-1.jpg  | Big shoe      |     11     | 2012-08-01 | 2012-08-01
 2 | 1-photo.png  | Small hat     |     12     | 2012-08-01 | 2012-08-01
 3 | jeansb1.gif  | Ankle socks   |     13     | 2012-08-01 | 2012-08-01


# Import product_image table backup
CSV.foreach(Rails.root.join("db/seeds/product_image.csv"), headers: true) do |row|
  ProductImage.create! do |product_image|
    product_image.id = row[0]
    product_image.title = row[1]
    product_image.image = row[2]
    product_image.product_id = row[3]
  end
end

の結果db:seed

# ProductImage model, product_image table after population of seed data

id |     image    |     tile      | product_id | created_at | updated_at 
--------------------------------------------------------------------------
 1 |              | Big shoe      |     11     | 2012-11-01 | 2012-11-01
 2 |              | Small hat     |     12     | 2012-11-01 | 2012-11-01
 3 |              | Ankle socks   |     13     | 2012-11-01 | 2012-11-01

image列以外はすべて入力されました。

このインポート/人口の問題を解決するためのヒントを誰かに教えてもらえないかと思っていました。誰かが以前にこの問題を経験したことがありますか?それはファイル名タイプ(例:.jpg)が原因ですか?

avatarまた、 CarrierWaveファイル名を保持する文字列である列を持つユーザーモデルを復元するときにも同じ問題が発生します。

前もって感謝します。

4

1 に答える 1

2

image=このメソッドは使用できません。 これは、文字列を直接設定しようとするときに誤用しているCarrierWaveメソッド(ActiveRecordのオーバーロード)です。

代わりに使用できますwrite_attribute

product_image.raw_write_attribute(:image, row[2])

image=これは、ActiveRecordがそのメソッド内で使用するものです。

于 2012-11-03T12:47:22.953 に答える