我是ActiveAdmin和Rails的新手,我在努力建立我的ActiveAdmin界面。
考虑以下模型:
class PageType < ActiveRecord::Base
has_many :fields, class_name: 'PageField'
accepts_nested_attributes_for :fields, allow_destroy: true
end
class PageField < ActiveRecord::Base
belongs_to :page_type
has_many :page_has_fields
has_many :pages, through: :page_has_fields
accepts_nested_attributes_for :page_has_fields, allow_destroy: true
end
class PageHasField < ActiveRecord::Base
belongs_to :page
belongs_to :page_field
end
class Page < ActiveRecord::Base
belongs_to :page_type
has_many :page_has_fields, dependent: :delete_all
has_many :page_fields, through: :page_has_fields
accepts_nested_attributes_for :page_fields, allow_destroy: true
end
在Active Admin中我想创建一些页面模板来处理“静态”页面。在每个页面中,我想更新与模板页面相关的每个字段的内容。
到目前为止,我使用此代码做了什么:
ActiveAdmin.register Page do
permit_params :name, :page_type_id, :page_id,
:page_fields_attributes => [:id, :name, :field_type, :page_id,
:page_has_fields_attributes => [:id, :content, :page_id]
]
form do |f|
f.inputs
f.has_many :page_fields, heading: false, new_record: false do |g|
g.inputs :name, :required
g.has_many :page_has_fields, new_record: false do |h|
h.input :content if h.object.page_id == f.object.id
end
end
f.actions
end
end
但是第二个似乎对我来说真的是错误的,我相信这个问题有更好的解决方案。 如果我不使用“if”,则为正确的字段创建输入,但是为每个页面创建输入。
有没有办法在has_many中指定ID或参数?还是一个更好的标签来处理这样的情况?
谢谢
答案 0 :(得分:0)
尝试将您的设置更改为更像这样的内容
ActiveAdmin.register Page do
...
form do |f|
f.inputs do
f.input :some_column
f.input :some_other_column
f.input :page_fields, as: :check_boxes, checked: PageField.all.map(&:name)
f.input :page_has_fields, as: :check_boxes, checked: PageField.all.map(&:content)
end
f.actions
end
end