【发布时间】:2014-05-21 16:27:15
【问题描述】:
除了一件小事之外,我的上传器运行良好。默认图像的设置。我正在使用carrierwave让用户上传自己的个人资料图片:
用户模型
class User < ActiveRecord::Base
has_one :avatar, class_name: 'Image', foreign_key: :user_id
before_create :create_fallback_image
def create_fallback_image
self.create_avatar
end
end
图像模型
class Image < ActiveRecord::Base
mount_uploader :file_name, AvatarUploader, auto_validate: false
belongs_to :user
end
头像上传器
class AvatarUploader < BaseUploader
include CarrierWave::RMagick
storage :file
process resize_to_fit: [75, 75]
process convert: 'gif'
def default_url
'foobar'
end
def filename
random_string + '.gif'
end
end
def random_string
@random_string ||= User.random_string
end
end
当用户在没有上传可选的个人资料图片的情况下注册时,他们会被分配到他们的个人资料图片的关联,但default_url 不会起作用,他们会从文件名方法中获得一个随机字符串。
我想我可以这样解决它:
用户模型
class User < ActiveRecord::Base
has_one :avatar, class_name: 'Image', foreign_key: :user_id
before_create :create_fallback_image
def create_fallback_image
# look here:
self.create_avatar.create_fallback
end
end
图像模型
class Image < ActiveRecord::Base
mount_uploader :file_name, AvatarUploader, auto_validate: false
belongs_to :user
def create_fallback
self.update_attributes(file_name: 'my_fallback.jpg')
end
end
虽然它几乎,几乎可以正常工作,但当我更新 file_name 列的属性时,上传程序启动,my_fallback.jpg 被我的random_string 方法中的随机字符串覆盖!
【问题讨论】:
-
根据聊天讨论,我已经用辅助方法更新了我的答案。