Я не знаю, как решить эту проблему. У меня следующая ситуация:
class Item < ActiveRecord::Base
has_many :item_parts, dependent: :destroy
has_many :parts, through: :item_parts
end
class Part < ActiveRecord::Base
has_many :item_parts, -> { joins(:item).order('item.name asc') }, dependent: :destroy
has_many :items, through: :item_parts
accepts_nested_attributes_for :item_parts, allow_destroy: true
end
class ItemPart < ActiveRecord::Base
belongs_to :item
belongs_to :part
attr_accessible :item_id, :part_id
end
На странице activeadmin есть эта форма:
ActiveAdmin.register Part
....
form html: { enctype: 'multipart/form-data' } do |f|
f.inputs do
f.input :name
f.has_many :item_party, heading: 'Item', new_record: 'Add a Item', allow_destroy: true do |a|
a.input :item,
label: 'Item',
as: :select,
collection: Item.names.call,
prompt: '-- Select a Item --'
end
end
f.actions
end
Допустим, у меня есть 1000+ Item, когда я нажимаю на редактирование, я получаю n +1 проблема с запросом.
Я пытался добавить:
ActiveAdmin.register Part
includes(:item, :item_parts)
Проблема: f.has_many: item_party это дает n + 1 проблему с запросом и «Запрос выполнен для длиннее 30000 мс.
Как их предварительно загрузить или включить?
Как избежать N + 1 в этом случае?