我有模型Home和Photo,它们有一个has_many - belongs_to关系(多态关系,但我不认为在这种情况下很重要)。我现在正在设置主动管理员,我希望管理员能够从家庭表单中将照片添加到家中。
照片由CarrierWave宝石管理,我不知道是否会让问题变得更容易或更难。
如何在Active Admin Home表单中包含其他模型的表单字段?有这样的经历吗?
class Home < ActiveRecord::Base
validates :name, :presence => true,
:length => { :maximum => 100 }
validates :description, :presence => true
has_many :photos, :as => :photographable
end
class Photo < ActiveRecord::Base
belongs_to :photographable, :polymorphic => true
mount_uploader :image, ImageUploader
end
答案 0 :(得分:54)
在app / admin / home.rb中尝试这样的事情:
form do |f|
f.inputs "Details" do
f.name
end
f.has_many :photos do |photo|
photo.inputs "Photos" do
photo.input :field_name
#repeat as necessary for all fields
end
end
end
确保在您的家庭模型中使用此功能:
accepts_nested_attributes_for :photos
我从另一个堆栈溢出问题修改了这个问题:How to use ActiveAdmin on models using has_many through association?
答案 1 :(得分:0)
我猜您正在寻找嵌套模型的表单。看看下面的railscast。
我无法告诉你很多关于active_admin的内容,但我认为这对处理嵌套模型没有任何影响。
答案 2 :(得分:0)
我有一个has_one模型,如下所示:
f.has_many :addresses do |a|
a.inputs "Address" do
a.input :street ... etc.
虽然这正确反映了我们使用Address
f.has_one
(多态模型)的关联失败。所以我转到了has_many
,一切都很顺利。除了现在我们必须阻止我们的用户为同一个实体创建多个地址。
答案 3 :(得分:0)
你可以试试这个:
form do |f|
f.semantic_errors # shows errors on :base
f.inputs # builds an input field for every attribute
f.inputs 'Photos' do
f.has_many :photos, new_record: false do |p|
p.input :field_name
# or maybe even
p.input :id, label: 'Photo Name', as: :select, collection: Photo.all
end
end
f.actions # adds the 'Submit' and 'Cancel' buttons
end
此外,您可以查看https://github.com/activeadmin/activeadmin/blob/master/docs/5-forms.md(参见嵌套资源)