比如一个表,里面有用户名,密码和用户头像等相关信息,而且用户头像这个字段和 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 了