【问题标题】:Rails destroys upload on has_one associationRails 破坏了 has_one 关联上的上传
【发布时间】:2018-07-26 20:47:19
【问题描述】:

我有一个与has_one :uploads, as: :uploadable 关联的组织模型

这是一个多态的关系

class Upload < ApplicationRecord
  include Uploaders::StandardUploader::Attachment.new(:file)
  belongs_to :uploadable, polymorphic: true, touch: true, optional: true
end

在创建记录方面一切正常,但是当我编辑时:

  = form.fields_for :upload, organization.upload do |form_upload|
    = form_upload.label :file
    = form_upload.file_field :file
      span Choose file...

控制器在edit方法中调用build_upload,它建立了一个新的关联,实际上销毁了现有的。

如果我不调用build_upload,则表单上传字段为空白。

我不知道发生了什么...我可以做些什么来防止 has_one 被破坏,这样现有的上传就不会丢失?

我应该怎么做才能确保表单填写现有的上传?

【问题讨论】:

  • 您使用的是符号而不是模型的实例。只需使用实例 @uploader 创建新表单进行编辑
  • @7urkm3n 请解释一下。你的意思是在我打电话给form_upload.file_field的视图中?

标签: ruby-on-rails shrine


【解决方案1】:

尝试设置关联

has_one :uploads, as: :uploadable, autosave: false

【讨论】:

    【解决方案2】:

    您应该启用nested attributes 以允许通过父记录更新关联的记录:

    class UploadableModel < ApplicationRecord
      # ...
      accept_nested_attributes_for :upload
    end
    

    fields_for 应该自动生成 ActiveRecord 期望的嵌套属性格式的表单字段。请参阅下面fields_for API 文档中的示例。

    【讨论】:

    • 谢谢,扬科。你知道那是什么吗?我没有reject_if: :all_blank,所以表单更新允许:file 信息为零......这反过来又删除了文件(我认为)。我不确定这是否是特定于 rails 5.1 的。我想更新我的问题以更清楚一点。这就是我在 12 小时编码后没有停下来的结果。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多