gra*_*i33 3 activerecord ruby-on-rails rails-migrations rails-activestorage
我有一个Message模型
class Message < ApplicationRecord
has_one_attached :attachment
Run Code Online (Sandbox Code Playgroud)
但现在我需要将其转换为:
class Message < ApplicationRecord
has_many_attached :attachments
Run Code Online (Sandbox Code Playgroud)
为消息启用多个附件所以我在模型中更改has_one_attached为has_many_attachedMessage
但当我运行时message.attachments.attached?它会返回false到现有附件。它适用于新附加的文件。
我应该添加迁移还是rake手动添加/转换附件的一次性任务?
这样做的正确方法是什么?
Dan*_*ean 10
返回 false的原因message.attachments.attached?是因为您将属性名称从 更改attachment为attachments。ActiveStorage 将该属性名称保存在数据库中,因此如果该名称在代码中发生更改,它就无法再找到旧的附件。
因此,要么不更改属性名称(最简单的解决方案),要么创建这样的数据迁移
ActiveStorage::Attachment.where(name: "attachment")
.where(record_type: "Message")
.update(name: "attachments")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1418 次 |
| 最近记录: |