ActiveStorage. 英文书Learnrails5.2的案例,看如何放到云上。
本例子目标:增加一个avatar image给每个用户。
准备:
需要安装Imagemagick software。 它可以create, edit, compose, or convert bitmap images. It can read and write images in a variety of formats 。
可以使用打包管理软件homebrew安装brew install imagemagick。
在Rails,需要使用gem 'mini_magick' 。通过这个gem来使用Imagemagic的功能。
⚠️,我使用80template的时候,没有用这个gem,也能正常使用。
开始:
安装ative_storage: rails active_storage:install
提示从active_storage迁移:
解释:
t.index [:key], unique:true使用了index()方法,其内部使用了@base.add_index()方法,这个方法会生成sql语句,和数据库交互:
CREATE UNIQUE INDEX active_storage_blobs_key_index ON active_storage_blobs(key)
index的名字是表名+列名+_index后缀,太长的话,可以使用便名:add_index(name:"")
解释:
t.references :blob使用了关联方法add_references()方法,选项null:false是不得为空。
还有:type, :foreign_key, :index等方法。
type默认是digint长整数。
foreign_key:true用于本列被设置为关联外键。
index:true调用add_index方法给这个列增加索引。
新增的两个数据表会储存所有信息。user表无需增加一个额外的列,只需在User model中建立一个关联使用ActiveStorage::Attached#Marcos#has_one_attached 宏方法。
这里has_one_attached :avatar
然后就可以使用avatar方法了
解释:
Macros是宏命令的简写 Macroinstruction。
除此之前还has_many_attached(), 这里ActiveStorage会自动映射recoreds和the attachments。其实这个方法内部使用了has_many关联了attachments,使用了has_many-through关联了bolbs。
在控制台建立一个user,然后:
> user.avatar.attach(io: File.open("/Users/chentianwei/Desktop/1.jpeg"), filename: "1.jpeg", content_type: "image/jpeg")
#attach()方法可以用参数params[:avatar]或者ActiveStorage::blob object
解释:
- 首先从Attachment中找到关联的user.
- 文件信息上传,并自动生成一个key
- 把文件插入到Blob数据表中。包括文件名,类型,大小,key等信息。
- 如果1中没有现存的记录,此时在Attachment中建立记录,关联上user以及blob。
- user的updated_at属性更新。
可以使用user.avator.attached? 检测是否成功,返回true.
在views/users/show.html.erb增加这个图像。
在控制器端修改create和update:例子:
在_form.html.erb中增加图片的上传操作:
<div>
<%= form.label :avatar %>
<%= form.file_field :avatar %>
</div>
增加了一个功能测试:测试文件上传是否成功:
attach_file("Avatar", "#{Rails.root}/spec/files/1.jpeg")
还要在spec_helper中设置删除测试数据库中的文件具体见:
https://www.cnblogs.com/chentianwei/p/9071330.html
以上是基础,Active Storage还也可resize图片尺寸,可以把图片保存在云端的。具体看指导,和ruby-china的帖子。
可能先需要云服务器的知识,以及部署产品环境。
转载于:https://www.cnblogs.com/chentianwei/p/9169049.html
ActiveStorage. 英文书Learnrails5.2的案例,看如何放到云上。相关推荐
- 从一个案例看系统优化
10月27日,由子衿技术团队首席架构师白鳝(徐戟)老师在"DBA+南京群"进行了一次关于"从一个案例看系统优化"的线上主题分享.小编特别整理出其中精华内容,供大 ...
- mysql英文怎么发音_如何给孩子读英文书?
你好,我是丹妈 亲子阅读推广人 文 = 汪培珽 "念英文故事书"这几个字,简直就像一颗手榴弹.每次我一提出来,总觉得听到的父母们,就会直觉地马上往后跳了三步远,好像它会爆炸似的.但 ...
- 第十二课 从宠物商店案例看DAPP架构和WEB3.JS交互接口
1. 文章摘要 [本文目标] 了解ETH生态下DAPP去中心化应用程序的框架和交互流程,了解WEB3.JS的作用和接口函数. [前置条件] 完成了<第六课 技术小白如何开发一个DAPP区块链应用 ...
- 我翻译的第一本英文书《SPY Academy》
我翻译的第一本英文书<SPY Academy>...... 忘记了哪一天,下班回家走进小区的路上,见到了一本"小脏书".这书不厚,全英文,四下没人就捡了起来.拂去了封面 ...
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...
- 【微信公众号● DBAplus】Oracle原厂老兵:从负面案例看Hint的最佳使用方式
原创 2016-10-12 罗敏 Oracle原厂老兵:从负面案例看Hint的最佳使用方式 作者介绍 罗敏,从事Oracle技术研究.开发和服务工作20余年,在Oracle中国公司的10多年,分别在 ...
- 真实案例看三鹿奶粉背后的行业潜规则
目前闹得沸沸扬扬的三鹿奶粉事件,作为一个可能的知情者和懂点化学的人, 我也来谈谈我的观点: 1.媒体也好,厂家也好,国家质量监督也好,还是在忽悠大家,为什么我敢这么说,因为三聚氰氨根本不可能直接加入牛 ...
- 英文书 or 中文书?
引子:今天一上来,就看到老赵的"书评",好多兄弟在看了博文和评论之后,大呼国内的计算机书太烂,有很多同志花了银子买了之后大呼上当,借此我引申一下,说些自己的观点. 凡是搞计算机的同 ...
- 一文看懂华为云AI新政,这波开发者福利有点硬
李根 发自 ShanghAI 量子位 报道 | 公众号 QbitAI 华为这家公司,"很吓人". 他们在做的事.要做的事,一旦进入执行,总会态势惊人,无论旧业务还是新领域. 比如 ...
最新文章
- Attack on Alpha-Zet
- linux修改网卡名(亲测有效)
- 可行性研究和软件项目计划主要完成什么工作?_软件生命周期
- echarts中国地图3D各个城市标点demo
- 用户使用报告_【市场】最新手机用户使用报告 8+256GB成首选 小屏党哭了
- 无法import的原因(ImportError: No module named *****)
- iphone开发工程师面试真题(又像c的)
- Atitit . 编程模型的变革总结
- Python类调用实例方法
- 高等数学学习笔记——第十二讲——正项级数收敛性判别方法
- ubuntu 16.04下设置静态IP地址
- 全“芯”赋能,SOM3568核心板
- Python面向对象三大特征之封装
- 汽车HiL测试简单介绍及其优势
- cdh6 添加新主机后,出现 Error sending messages to firehose
- 【编程语言】Swift完全自学手册
- Vue中base64编码和解码
- 搭建全球地图数据服务中心
- 深入理解RocketMQ Rebalance机制
- 如何实现IEEE1588 高精度时间同步