【发布时间】:2020-12-14 12:12:21
【问题描述】:
在我的 rails_admin 应用程序中,我有一个表“Branch”,它引用了另一个名为“Alarms”的表。在“分支”中,我想只选择一个警报并有一个搜索框来搜索这些警报。
目前,我只能创建一个下拉列表,其中包含与该分支相关的所有警报,这会导致渲染许多条目(超过 25k)并消耗内存。
我找不到一个示例如何创建一个显示“条目太多,搜索以选择”的下拉列表,类似于 has_and_belongs_to_many。
它的外观如下:
class Branch < ApplicationRecord
...
# this is fine and works as expected, selecting only the first (and only) entry
show do
field :maintenance_period_trigger_alarm_id do
formatted_value do
alarm = Alarm.where(id: bindings[:object].maintenance_period_trigger_alarm_id).first
path = bindings[:view].show_path(model_name: 'alarm', id: alarm.id)
bindings[:view].link_to(alarm.name, path)
end
end
end
...
# this is where all elements are automatically loaded and rendered in the dropdown
edit do
field :maintenance_period_trigger_alarm_id, :enum do
enum do
Alarm.where(branch_id: bindings[:controller].params[:id]).collect{ |alarm| [alarm.name, alarm.id] }
end
end
end
我不确定如何启用简单的“条目过多”消息,以使其不显示 25k 条目。
【问题讨论】:
-
count记录,如果超过某个阈值,则显示静态消息而不是填充下拉列表。 -
您正在寻找的是一个选择字段,它没有预先填充选择选项,但当用户开始输入搜索字符串时,它将动态开始查询服务器以查找匹配选项。看看https://select2.org/data-sources/ajax。如果您在实施它时需要任何帮助,请告诉我!
-
遵循@AndreasGebhard 的想法,您可以使用内置的选择选项下拉菜单,如果您想按照该路线进行操作,我可以为您提供答案
-
我对任何一种方法都持开放态度。但是我不确定如何实现它,因为我对 rails 不是很好(不是说很糟糕),而且代码库没有我可以复制和扩展的东西。一个充实的答案听起来令人兴奋。
标签: ruby-on-rails ruby memory rails-admin