4

2 つのモデルがあり、それぞれに独自の Carrierwave アップローダーがあります。

class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
end

と:

class Bookshelf < ActiveRecord::Base
  mount_uploader :image, ImageUploader
end

ユーザーのアバターを、アップロードした最新の本棚の画像にしたい。私はこれを次のように達成しようとします:

class BookcasesController < ApplicationController
  def create
    @bookcase = current_user.bookcases.build(params[:bookcase])
    if @bookcase.save
      current_user.avatar = @bookcase.image
      current_user.avatar.recreate_versions!
    end
  end
end

残念ながら、これはアバターにはまったく影響しません。他にどのようにこれを達成できますか?

4

2 に答える 2

9
current_user.avatar = @bookcase.image
current_user.avatar.recreate_versions!

実際には保存されません --- 次のいずれかを実行できます。

current_user.avatar.save

またはあなたが言うように:

current_user.update_attribute(:avatar, @bookcase.image)
于 2012-07-27T01:18:16.217 に答える
1

画像ファイルがローカルに保存されていて、ファイル記述子を開いてもかまわない場合は、次のようにすることもできます。

current_user.avatar = File.open(@bookcase.image.path)
current_user.save
于 2014-05-02T19:01:28.017 に答える