Gem carrierwave 的不能更新的问题。

g_tree · November 06, 2012 · Last by xmonkeycn replied at May 22, 2013 · 2651 hits

比如一个表,里面有用户名,密码和用户头像等相关信息,而且用户头像这个字段和 carrierwave 挂上了,问题是,注册的时候,不会让用户之间上传头像图片的,那么这个用户头像的字段,如何去修改?通过什么方式呢?难道只能通过上传文件的方式去修改么?

假设 mount_as :avatar 可以 user.avatar.store! File.read("path/to/file") 来手动赋值

#1 楼 @jasl 我是在 User 里 mount_uploader :avatar, AvatarUploader,那么在新建的注册用户字段中,那个 avatar 字段是使用 User.avatar.store!File.read("path/to/file") 来赋值么?

@g_tree 我是说你可以这么做。。。爬虫往 db 里导入数据的时候我就是这么做的。。。。

#3 楼 @jasl 现在产生的问题就是,只要在 model 里,使用 mount_uploader :avatar, AvatarUploader,那么除了 carrierwave 能更新 avatar 字段,其他方式都不行。就是想知道这个字段能不能使用什么方式修改!

@g_tree user.avatar.store! File.read("path/to/file") 这样呗。file 提前准备。。。或许有更好的方法

留空就行了吧,validates 的时候加上 :allow_blank => true

如果你想实现“用户没有头像就显示默认头像”,可以在 model 里面加一个方法,类似

def avatar
  self.avatar || 'default_avatar_path'
end

#6 楼 @zhuoqun 留空也不行哦,只要被 uploader 绑定的字段,就不能由其他的东西修改,不然会出错。意思就是就算在表里新增一个记录,这个字段也必须由 uploader 来处理。

或许只能用 @jasl 的方法解决了!

@g_tree CarrierWave 提供了个方法:write_uploader(column, identifier),我在 carrierwave (0.8.0) 下测试,是可用的。

user = User.first
user.write_uploader("avatar", "aaa.jpg")
user.save

#9 楼 @wxluckly 谢谢,找了个半天终于找到这个方法了,本来上传好的东东就可以直接导入 carrierwave 了

You need to Sign in before reply, if you don't have an account, please Sign up first.