Gem carrierwave 的不能更新的问题。

g_tree · 2012年11月06日 · 最后由 xmonkeycn 回复于 2013年05月22日 · 2644 次阅读

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号