多年来尝试不打扰任何人,但确实需要帮助的第一个问题。我构建了一个Dockerized Rails 5.2 Active Storage / Postgers内容管理系统,该系统使用rake数据管道来摄取一组csv文件来构建核心模型。最后一步是下载图像并将其附加到实体模型:
has_one_attached :mark
当我从客户端收到一组新的csv文件时,我有一个过程,在该过程中,我将新文件手动移至“在制品”文件夹中,删除了storage /中的所有文件,停止了所有容器运行应用程序,数据库和服务器,然后运行一系列rake任务,该任务以重置和迁移数据库开始:
docker-compose run --rm app rake db:migrate:reset
然后运行两组任务,一组任务从csv加载每个模型的所有记录,另一组将所有记录彼此链接。如前所述,最后一步是附加图像。但是,即使在我再次附加图像之前,我也测试了系统在没有任何图像的情况下仍能正常工作。注意,我已经手动删除了storage /中的所有内容,删除了数据库,进行了迁移,加载了除图像之外的所有数据,重新加载了页面,然后出现此错误:
variant delegated to attachment, but attachment is nil
当我检查entity.mark时,我得到了:
Mark: [#<ActiveStorage::Attached::One:0x000055e485721fb8 @name="mark", @record=#<Entity id: 2, name: " Huashan Hospital", slug: "huashan_hospital", imageurl: "https://dl.airtable.com/OE7WXy0jRTe7zdFb79Fj_hsyy....", created_at: "2018-07-20 22:25:58", updated_at: "2018-07-20 22:25:58">, @dependent=:purge_later>
我问哪个问题,这是哪里来的?在Postgres中没有条目
select * from active_storage_attachments;
id | name | record_type | record_id | blob_id | created_at
----+------+-------------+-----------+---------+------------
(0 rows)
或在
select * from active_storage_blobs;
id | key | filename | content_type | metadata | byte_size | checksum | created_at
----+-----+----------+--------------+----------+-----------+----------+------------
(0 rows)
并且存储中没有文件/
ls -la storage/
total 16
drwxr-xr-x 4 bauer staff 136 Jul 20 15:34 .
drwxr-xr-x 36 bauer staff 1224 Jul 18 21:11 ..
-rw-r--r--@ 1 bauer staff 6148 Jul 20 15:34 .DS_Store
-rw-r--r-- 1 bauer staff 0 May 8 21:20 .keep
我怀疑我的问题不是要深入了解ActiveStorage的工作原理,特别是purge与purge_later,Docker如何影响Rails开发,我蛮横的手动删除存储空间行为/以及数据库的重置,令人震惊的狂妄自大。显示出我可以同时学习Rails 5.2,ActiveStorage和Dockerization的想法。
我恳求谦卑。
答案 0 :(得分:1)
Entity#mark
始终返回ActiveStorage::Attached::One
对象,即使未附加任何标记也是如此。这简化了entity.mark.attach(...)
API。
致电ActiveStorage::Attached::One#attached?
,以确定是否附有商标:
<% if entity.mark.attached? %>
<%= image_tag entity.mark.variant(...) %>
<% end %>