如何使用资产管道(回形针)中的图像为Rails db播种?

杰克

我正在尝试为客户端重构我的Rails应用程序。

我创建了一个新的模式与相关栏(titledescriptionbody)。

我需要添加image到该模型中,但是我不知道要使用哪种数据类型,并且我读到将图像放入数据库中不是一个好主意。

目前,我正在尝试使用来自客户端的所有数据为db播种,并努力寻找一种在图像中播种的方法。到目前为止,我有以下内容:

Model.create!([
  {
    title: "Title",
    description: "Some decription",
    body: "Here is the body",
    sort_order: 1 
  },
  { 
    title: "Title",
    description: "Some description",
    body: "Here is the body",
    sort_order: 2
  }
])

我应该添加image到模型中,以便可以使用种子文件填充它吗?如果是这样,数据类型是string什么-也许

格兰特·诺伊费尔德

公众形象

如果要引用公用文件夹中的映像,请将该根相对路径作为映像存储string在数据库中。(例如,如果您的图片文件是project/public/images/pic.jpg,那么您将拥有image: '/images/pic.jpg'种子。

资产管理图片

如果您引用资产中的图像,则操作可能会变得更加复杂(除非您不明智地关闭了config.assets.digest配置)。您将要使用种子文件中资产的路径(就像该答案的第一部分引用公用文件夹中的文件一样),但是当您想要链接到视图中的图像时,则必须使用Rails'image_tag获取图片的资产管理网址。

如果您出于某种原因想要以除image_tag视图之外的任何方式获得资产管理的图像路径,则它会变得有些复杂。您可以在《资产管道》的官方Rails指南中找到有关使用资产管道的更多详细信息

存储在数据库中的图像

如果要将图像文件数据存储在数据库中,则应使用一个binary字段(不是string)。您可以通过调用加载图像数据File.read例如:

image_data = File.read('path/to/image.jpg')
Model.create!([
  {
    ...
    image: image_data
  },
  ...
])

您需要添加自定义控制器方法和路由,以将图像数据作为文件传递给客户端(请确保为此正确处理了mime类型)。

就个人而言,在那些我选择将原始文件数据存储在数据库中的情况下,我更喜欢为数据准备一个单独的表,然后根据需要将其连接到主模型。(在这种情况下,将存在您现有的images表,并且将其连接到一个名为的表中image_files,除了之外只有一个字段id):

create_table :image_files do |t|
  t.binary :data
end

然后可以从images表中引用它

t.belongs_to :image_file

(或将引用放在images表中image_files。)

至于用于/反对在数据库中存储原始文件数据的参数,通常它是次优的(您失去了让Web服务器直接从文件系统发送文件并且必须进行Rails干预的好处)。但这在某些情况下是有意义的(例如,当您想限制访问权限(例如,特定用户)时)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章