我能够使用引用自身和jquery的相邻列表模型为省和城市创建动态下拉列表,但需要永远加载。
然而,它的工作原理是我希望它能够发挥作用;每次渲染表单时,此过程需要加载7473.4ms,因为我的位置表中有1718行,并且它尝试一次加载一个1718行。
我发现,使其加载的时间更长的是collective_collection_select,但我无法想到更快的替代方案。有没有查询调整,你可以建议我加快这个表单加载?
该模型如下所示:
class Location < ActiveRecord::Base
has_many :books
belongs_to :parent_location, class_name: Location
has_many :child_locations, class_name: Location, foreign_key: "parent_id"
end
和db(位置表)看起来像这样,但它有1718行:
id location parent_id
1 Philippines
2 Metro Manila 1
3 Abra 1
4 Caloocan City 2
5 City of Las Pinas 2
6 Pilar 3
7 Sallapadan 3
我可以使用&#34; collection_select&#34;进行动态下拉菜单。对于省份下拉菜单和&#34; grouped_collection_select&#34;对于我的_form.html.haml中的城市:
= f.collection_select :location_id, Location.where(parent_id: "1"), :id, :name, {prompt: "Select a Province"}, id: "province"
= f.grouped_collection_select :location_id, Location.all, :child_locations, :name, :id, :name, {prompt: "Select a City/Municipality"}, id: "city"
然后我使用jQuery在我的js.cofee文件中仅显示所选省份下的城市:
jQuery ->
city = $('#city').html()
$('#province').change->
province = $('#province :selected').text()
options = $(city).filter("optgroup[label='#{province}']").html()
if options
$('#city').html(options)
else
$('#city').empty()
答案 0 :(得分:1)
我可以通过在grouped_collection
中使用预加载来降低速度:
它预加载所有使加载时间更快的child_locations
= f.grouped_collection_select :location_id, Location.preload(:child_locations), :child_locations, :name, :id, :name, {prompt: "Select a City/Municipality"}, id: "city"