Carrierwave:在第二个模型中复制文件

时间:2012-07-26 00:12:51

标签: ruby-on-rails carrierwave

我有两个模型,每个模型都有自己的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

不幸的是,这根本没有对头像产生任何影响。我怎么可能实现这个目标呢?

2 个答案:

答案 0 :(得分:6)

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

实际上没有保存---你可以:

current_user.avatar.save

或者如你所说:

current_user.update_attribute(:avatar, @bookcase.image)

答案 1 :(得分:1)

如果您的图像文件存储在本地并且您不介意打开文件描述符,您也可以这样做:

current_user.avatar = File.open(@bookcase.image.path)
current_user.save