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_docs
。 support_doc
有两个属性:
- Active Storage 文件附件
- 文件名
当我不包含 support_doc :filename
输入时,表单工作正常 - 例如,我可以毫无问题地附加文件。但是当我包含 filename
属性输入或任何其他输入字段时,文件输入字段消失(甚至在 HTML DOM 中也不存在)。
重现步骤:
- 创建一个包含许多其他模型 (B) 的模型(我们称之为 A)
- 在 A 中,允许 B 的嵌套属性
- 在创建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
!
的嵌套形式中
如何阻止我的文件输入字段被我的文本输入字段替换?
版本:
Rails 5.2.1
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
rvm 1.29.4
我正在使用 Active Admin 表单创建一个新对象 - product
可以有很多 support_docs
。 support_doc
有两个属性:
- Active Storage 文件附件
- 文件名
当我不包含 support_doc :filename
输入时,表单工作正常 - 例如,我可以毫无问题地附加文件。但是当我包含 filename
属性输入或任何其他输入字段时,文件输入字段消失(甚至在 HTML DOM 中也不存在)。
重现步骤:
- 创建一个包含许多其他模型 (B) 的模型(我们称之为 A)
- 在 A 中,允许 B 的嵌套属性
- 在创建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
!