Rails 5.2.1:文件输入被文本输入取代 - ActiveAdmin 嵌套属性形式

Rails 5.2.1: File input being replaced by text inputs - ActiveAdmin nested attributes form

如何阻止我的文件输入字段被我的文本输入字段替换?

版本:

Rails 5.2.1

ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

rvm 1.29.4

我正在使用 Active Admin 表单创建一个新对象 - product 可以有很多 support_docssupport_doc 有两个属性:

  1. Active Storage 文件附件
  2. 文件名

当我不包含 support_doc :filename 输入时,表单工作正常 - 例如,我可以毫无问题地附加文件。但是当我包含 filename 属性输入或任何其他输入字段时,文件输入字段消失(甚至在 HTML DOM 中也不存在)。

重现步骤:

  1. 创建一个包含许多其他模型 (B) 的模型(我们称之为 A)
  2. 在 A 中,允许 B 的嵌套属性
  3. 在创建A的表单中,在嵌套属性has_many部分为B设置文件字段和文件名输入

Product.rb

# == Schema Information
#
# Table name: products
#
#  id         :integer          not null, primary key
#  title      :string
#  created_at :datetime         not null
#  updated_at :datetime         not null


class Product < ApplicationRecord
  has_many :support_docs, inverse_of: :product

  accepts_nested_attributes_for :support_docs
end

Support_doc.rb

# == Schema Information
#
# Table name: support_docs
#
#  id         :integer          not null, primary key
#  created_at :datetime         not null
#  updated_at :datetime         not null
#  filename   :string
#  product_id :integer


class SupportDoc < ApplicationRecord
  has_one_attached :doc_file
  belongs_to :product

  validates_presence_of :product
end

products.rb(Active Admin 资源中的表格)

ActiveAdmin.register Product do
  permit_params :title, support_docs_attributes: [:doc_file, :filename]

  form do |f|
    f.inputs do
      f.input :title
      f.has_many :support_docs do |doc|
        doc.file_field :doc_file, direct_upload: true
        doc.input :filename
      end
    end
    f.actions
  end
end

示例:

当我不包括 :filename 输入时(products.rb 中的第 9 行):

当我包含 :filename 输入时:

如您所见,文件输入字段已替换为我包含的任何输入字段。我已经对此进行了尽可能多的研究,但找不到有类似问题的人!

已修复!

doc.file_field 导致了问题。我用 doc.input :doc_file as: :file 切换了它。显然,您不能将 file_field 绑定到 inputs!

的嵌套形式中