Rails 6 Active Storage:无法找到或构建 blob:预期可附加...((重新)设置附件时出现问题)

Jos*_*ers 3 activerecord ruby-on-rails attachment rails-activestorage

在我的应用程序中,管理员用户可以建议和编辑其他用户的个人资料。我希望管理员用户能够为非管理员用户建议一个(新的)头像。目前我的用户(用户=spkr在我的应用程序中)模型具有:

has_one_attached :image
has_one_attached :edited_image
Run Code Online (Sandbox Code Playgroud)

哪里image是用户选择的头像图片,哪里edited_image是管理员用户建议的头像图片。

当使用管理“更新”表单时,edited_image设置

if spkr_params[:edited_image].present?
  @spkr.edited_image = spkr_params[:edited_image]
end
Run Code Online (Sandbox Code Playgroud)

这成功地将附件设置为edited_image.

当管理员用户提交编辑时,非管理员用户会收到一封确认电子邮件。单击时,我希望image非管理员用户的 进行更新。

...
if @spkr.edited_image.present?
   @spkr.image.purge
   @spkr.image = @spkr.edited_image
end
@spkr.save!
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误@spkr.save!:

Could not find or build blob: expected attachable, got #<ActiveStorage::Attached::One:0x00007fdcc44fa440 @name="edited_image", @record=#<Spkr id: 154... >>
Run Code Online (Sandbox Code Playgroud)

这是edited_image来自@spkr:

@spkr.edited_image
=> #<ActiveStorage::Attached::One:0x00007fdcc44fa440 @name="edited_image", @record=#<Spkr id: 154...>>
Run Code Online (Sandbox Code Playgroud)

我的感觉是 @spkr.edited_image 不是 @spkr.edited_image 的“可附加部分”,但我不确定如何解决这个问题。

感谢您的任何帮助。

Jos*_*ers 6

我通过更换线路解决了这个问题

@spkr.image = @spkr.edited_image
Run Code Online (Sandbox Code Playgroud)

和

@spkr.image = @spkr.edited_image.blob
Run Code Online (Sandbox Code Playgroud)

这也有效:

@spkr.image.attach(@spkr.edited_image.blob)
Run Code Online (Sandbox Code Playgroud)