在 Rails 4 中使用 ActiveAdmin,我有两个模型,Document
和 Attachment
它们之间是一对多的关系。
# models/document.rb
class Document < ActiveRecord::Base
has_many :attachments
accepts_nested_attributes_for :attachments
end
# models/attachment.rb
class Attachment < ActiveRecord::Base
belongs_to :document
end
我注册了模型并包含了
permit_params
对于每个字段中的所有字段。现在我用了
has_many
在下面代码的表单 View 中。这显示了一个添加附件的选项,它工作得很好。 # admin/document.rb
ActiveAdmin.register Document do
permit_params :title, :description, :date, :category_id
show do |doc|
attributes_table do
row :title
row :description
row :attachments do
doc.attachments.map(&:document_path).join("<br />").html_safe
end
end
end
form do |f|
f.inputs "Details" do
f.input :title
f.input :description
f.input :category
f.has_many :attachments, :allow_destroy => true do |cf|
cf.input :document_path # which is a field in the Attachment model
end
end
f.actions
end
end
但是,当我提交表单时,文档对象被保存,但没有附件对象与它一起保存。据我所知,它应该创建与我在表单中添加的附件一样多的附件,并将它们的 document_id 属性传递给创建的文档 ID。不幸的是,这不会发生,在显示 View 中留下附件行“EMPTY”。我错过了什么吗?
提前致谢。
最佳答案
您忘记允许attachments_attributes。
为了将 accepts_nested_attribute_for 与强参数一起使用,您需要指定哪些嵌套属性应列入白名单。
更多信息 http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html
关于ruby-on-rails - ActiveAdmin 表单不保存嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20648081/