Rails 5中CarrierWave仅存图片文件名而非完整路径的问题咨询
不需要额外添加回调!
嘿,完全不用手动加before_save或者after_save回调来处理路径哦~这其实是CarrierWave(你用的mount_uploader就是它的核心API)的正常设计:数据库里只存储文件名,而完整的文件路径、访问URL这些逻辑,都交给Uploader实例来处理。
你看到profile.avatar返回文件名,是因为CarrierWave的Uploader对象在被转换成字符串时,默认会返回文件名,但它本质上是一个包含很多实用方法的对象:
- 获取本地存储的完整文件路径:
profile.avatar.path - 获取浏览器可访问的完整URL:
profile.avatar.url - 如果你在
AvatarUploader里定义了版本(比如你例子里的thumb),还能直接拿到对应版本的URL:profile.avatar.thumb.url
举个实际使用的例子,在视图里要显示头像的话,应该这么写:
<%= image_tag profile.avatar.url %>
要是你硬要把完整路径存到数据库里(非常不推荐,因为这种设计会让你后续更换存储后端比如AWS S3变得非常麻烦),那才需要用回调,但真的没必要——CarrierWave已经帮你把路径管理的事情封装得很完善了。
内容的提问来源于stack exchange,提问作者Kieu Hua
相关产品推荐
相关产品推荐

