4

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