Select 包含很多项目的标签需要时间来呈现

Select tag with many items takes time to render

我有一个带有 select 标签的表单,其中包含将近 17k 个项目。

<%= f.select :company_industry_id, options_for_select(@company_industries.map{
 |c| [c.name, c.id] }, selected_key = @company.company_industry_id),
 {}, {:class => 'input_text'} %>

加载 @company_industries 的数据大约需要 0.01 秒。

@company_industries = CompanyIndustry.select(:id, :name).order('name ASC')

但是,在 f.select 框中呈现它需要大约 18 秒(如果表单中没有此 f.select 元素,页面将在 350-400 毫秒内呈现)。

如何避免这种减速?有没有办法优化 f.select 元素?或者,是否有 f.select 的替代方案?

我建议select2

最好的方法是不要立即加载数据,而是当用户输入 3 个字母时,然后显示用这 3 个字母过滤的数据。它还为您提供了搜索 17k 元素的好方法,以更快地找到结果。