Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将has_one_附加到has_many_附加到具有has_one附件的现有表?_Ruby On Rails_Activerecord_Rails Migrations_Rails Activestorage - Fatal编程技术网

Ruby on rails 如何将has_one_附加到has_many_附加到具有has_one附件的现有表?

Ruby on rails 如何将has_one_附加到has_many_附加到具有has_one附件的现有表?,ruby-on-rails,activerecord,rails-migrations,rails-activestorage,Ruby On Rails,Activerecord,Rails Migrations,Rails Activestorage,我有一个消息模型 class Message < ApplicationRecord has_one_attached :attachment 类消息

我有一个消息模型

  class Message < ApplicationRecord
    has_one_attached :attachment
类消息
但现在我需要将其转换为:

  class Message < ApplicationRecord
    has_many_attached :attachments
类消息
为邮件启用多个附件的步骤 因此,我更改了模型消息中的has_one_附件has_many_附件

但当我运行
message.attachments.attached?
时,它会将false返回到现有附件。 它适用于新附加的文件

我应该添加迁移还是手动添加的一次性rake Tak


正确的方法是什么?

之所以
message.attachments.attached?
返回false,是因为您将属性名称从
attachment
更改为
attachments
。ActiveStorage将该属性名称保存在DB中,因此如果该名称在代码中发生更改,它将无法再找到旧的附件

因此,要么不更改属性名称(最简单的解决方案),要么像这样创建

    ActiveStorage::Attachment.where(name: "attachment")
                             .where(record_type: "Message")
                             .update(name: "attachments")