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迁移:

class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
  def change
    create_table :active_storage_blobs do |t|
      t.string   :key,        null: false
      t.string   :filename,   null: false
      t.string   :content_type
      t.text     :metadata
      t.bigint   :byte_size,  null: false
      t.string   :checksum,   null: false
      t.datetime :created_at, null: false
      t.index [ :key ], unique: true
    end
    create_table :active_storage_attachments do |t|
      t.string     :name,     null: false
      t.references :record,   null: false, polymorphic: true, index: false
      t.references :blob,     null: false
      t.datetime :created_at, null: false
      t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
    end
  end
end

解释:

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

解释:

  1. 首先从Attachment中找到关联的user.
  2. 文件信息上传,并自动生成一个key
  3. 把文件插入到Blob数据表中。包括文件名,类型,大小,key等信息。
  4. 如果1中没有现存的记录,此时在Attachment中建立记录,关联上user以及blob。
  5. user的updated_at属性更新。

可以使用user.avator.attached?  检测是否成功,返回true.

在views/users/show.html.erb增加这个图像。

<% if @user.avatar.attached? %>
  <p>
  <%= image_tag(url_for(@user.avatar), size: "200")%>
  </p>
<% end %>

在控制器端修改create和update:例子:

  def update
    avatar = params[:user][:avatar]
    respond_to do |format|
      if @user.update(user_params)
        if avatar
          @user.avatar.attach(avatar)
        end

在_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的案例,看如何放到云上。相关推荐

  1. 从一个案例看系统优化

    10月27日,由子衿技术团队首席架构师白鳝(徐戟)老师在"DBA+南京群"进行了一次关于"从一个案例看系统优化"的线上主题分享.小编特别整理出其中精华内容,供大 ...

  2. mysql英文怎么发音_如何给孩子读英文书?

    你好,我是丹妈 亲子阅读推广人 文 = 汪培珽 "念英文故事书"这几个字,简直就像一颗手榴弹.每次我一提出来,总觉得听到的父母们,就会直觉地马上往后跳了三步远,好像它会爆炸似的.但 ...

  3. 第十二课 从宠物商店案例看DAPP架构和WEB3.JS交互接口

    1. 文章摘要 [本文目标] 了解ETH生态下DAPP去中心化应用程序的框架和交互流程,了解WEB3.JS的作用和接口函数. [前置条件] 完成了<第六课 技术小白如何开发一个DAPP区块链应用 ...

  4. 我翻译的第一本英文书《SPY Academy》

    我翻译的第一本英文书<SPY Academy>...... 忘记了哪一天,下班回家走进小区的路上,见到了一本"小脏书".这书不厚,全英文,四下没人就捡了起来.拂去了封面 ...

  5. HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引

    1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...

  6. 【微信公众号● DBAplus】Oracle原厂老兵:从负面案例看Hint的最佳使用方式

    原创 2016-10-12 罗敏  Oracle原厂老兵:从负面案例看Hint的最佳使用方式 作者介绍 罗敏,从事Oracle技术研究.开发和服务工作20余年,在Oracle中国公司的10多年,分别在 ...

  7. 真实案例看三鹿奶粉背后的行业潜规则

    目前闹得沸沸扬扬的三鹿奶粉事件,作为一个可能的知情者和懂点化学的人, 我也来谈谈我的观点: 1.媒体也好,厂家也好,国家质量监督也好,还是在忽悠大家,为什么我敢这么说,因为三聚氰氨根本不可能直接加入牛 ...

  8. 英文书 or 中文书?

    引子:今天一上来,就看到老赵的"书评",好多兄弟在看了博文和评论之后,大呼国内的计算机书太烂,有很多同志花了银子买了之后大呼上当,借此我引申一下,说些自己的观点. 凡是搞计算机的同 ...

  9. 一文看懂华为云AI新政,这波开发者福利有点硬

    李根 发自 ShanghAI  量子位 报道 | 公众号 QbitAI 华为这家公司,"很吓人". 他们在做的事.要做的事,一旦进入执行,总会态势惊人,无论旧业务还是新领域. 比如 ...

最新文章

  1. Attack on Alpha-Zet
  2. linux修改网卡名(亲测有效)
  3. 可行性研究和软件项目计划主要完成什么工作?_软件生命周期
  4. echarts中国地图3D各个城市标点demo
  5. 用户使用报告_【市场】最新手机用户使用报告 8+256GB成首选 小屏党哭了
  6. 无法import的原因(ImportError: No module named *****)
  7. iphone开发工程师面试真题(又像c的)
  8. Atitit . 编程模型的变革总结
  9. Python类调用实例方法
  10. 高等数学学习笔记——第十二讲——正项级数收敛性判别方法
  11. ubuntu 16.04下设置静态IP地址
  12. 全“芯”赋能,SOM3568核心板
  13. Python面向对象三大特征之封装
  14. 汽车HiL测试简单介绍及其优势
  15. cdh6 添加新主机后,出现 Error sending messages to firehose
  16. 【编程语言】Swift完全自学手册
  17. Vue中base64编码和解码
  18. 搭建全球地图数据服务中心
  19. 深入理解RocketMQ Rebalance机制
  20. 如何实现IEEE1588 高精度时间同步

热门文章

  1. 一部手机不用任何软件轻松下载闲鱼短视频
  2. 获取蓝牙模块HC-05模块地址(物理地址)的方法
  3. 如何分析诊断网站(转载)
  4. 【Echarts 绘制柱状图、折线图和扇形图】
  5. 最新Vue 天禹老师笔记
  6. 异常:Error resolving template xxx, template might not exist or might not be accessible...解决办法
  7. Java-File类详解(一篇讲透)
  8. 何时能在无线城市生活
  9. 业界:苹果软件更新不会改变世界,但带来了更多新鲜感
  10. css几种常见的单位