我正在尝试为客户端重构我的Rails应用程序。
我创建了一个新的模式与相关栏(title
,description
,body
)。
我需要添加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] 删除。
我来说两句