我正在构建一个界面来管理可以连接很多人的组织。总人数由几千人组成。
据我所知,AA对于这种情况并没有真正的好系统。
到目前为止,我在表单块中使用了类似的内容来添加/删除组织中的人员:
f.has_many :person_organizations, for: [:person_organizations, f.object.person_organizations.active] do |connection_f|
all_people = Person.select([:id, :firstname, :lastname]).order(:firstname, :lastname)
connection_f.input :person, as: :select,
collection: all_people,
member_label: proc { |d| "#{d.firstname} #{d.lastname}"
unless connection_f.object.nil?
# Show the destroy checkbox only if it is an existing person
# else, there's already dynamic JS to add / remove new dentists
connection_f.input :_destroy, as: :boolean, label: 'Delete this connection'
end
end
问题在于,在向组织添加一些人之后,生成所有选择框所花费的时间开始变得很大,因为它必须为每个元素执行相同的工作。见下文(“slett denne koblingen”的意思是“删除此连接”)
有谁知道减轻这种疼痛的方法?
我有几个想法,但我不太明白我将如何实现它们:
此外,我知道有一个github问题正在讨论这种挑战的解决方案,但似乎还有一段距离,如果它将被实施:https://github.com/activeadmin/activeadmin/issues/2692#issuecomment-71500513
答案 0 :(得分:1)
我遇到了同样的迟钝。您面临的挑战是将创建的已填充选择的数量。我建议使用某种形式的AJAX和Select2 / Chosen组合来“自动完成”文本框输入。这将大大减少HTML占用空间并加快加载时间。您的管理员也可能更了解用户体验。
https://github.com/activeadmin/activeadmin/issues/1754
https://github.com/mfairburn/activeadmin-select2
Viget Labs有一个gem,它为处理自动完成关联提供了另一种解决方案。 https://github.com/vigetlabs/active_admin_associations
答案 1 :(得分:0)
面对你所描述的同样问题,我发现你的第一个假设是最好的。
需要说的是,我首先尝试过这种选择2,而且它没有帮助,甚至让事情变得更慢。这是因为在这种情况下大部分时间的rails都不是在查询数据库(否则selecta with ajax会有所帮助),但是" drawing"观点。因此,当你要求rails绘制更复杂的视图时,它会以速度失败。
所以我做了很简单的事情:on" has_many"部分你已经描述过我:
f.inputs 'Personer' do f.has_many :person_organizations, for: [:person_organizations, f.object.person_organizations.active], new_record: false do |connection_f| if connection_f.object.person.present? li connection_f.object.person.name li link_to 'destroy', { controller: :person_organizations, action: :destroy, id: connection_f.object.id }, method: :delete, data: { confirm: 'Are you sure?' } li link_to 'edit', edit_admin_person_organization_path(connection_f.object) end end end li link_to 'Add new person-organization connection', new_admin_person_organization_path(id: f.object.id)
并在ActiveAdmin.register PersonOrganization
文件中我有一些自定义重定向,以重定向到" parent"模型。
controller do def update update! do |format| format.html { redirect_to edit_admin_medical_practice_path(resource.organization) } if resource.valid? end end end
这改变了我的慢速AA页面要快一点。