2016-02-10 3 views
0

Я использую рельсы 4.2.5. У меня есть какие-то N + 1 проблема в этом кодеRails 4 ActiveRecord многопользовательские запросы

seats=SeatItem.where(:b => hall.id).all seats.each do |seat| arr << Ticket.new(:a => seat.id) end Ticket.import arr

Проблема этого кода является то, что у меня есть это в журнале

MIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE "seat_item_types"."id" = $1 LIMIT 1 [["id", 13]] CACHE (0.0ms) SELECT "seat_item_types".* FROM "seat_item_types" WHERE

Почему :all метод не загружает все памяти и как это исправить? Благодарим вас за ввод!

ответ

0

Я не думаю :all i проблема. Обратите внимание, что повторный SQL-запрос идентичен и что он извлекает строки из seat_item_types, а не seat_items. Я предполагаю, что у вас есть до/после крючка или какой-либо другой код, который запускается Ticket.new или Ticket.import, который обращается к seat_item_type.

+0

Ваш агент действительно очень помог! Спасибо! –

0

Вы должны использовать eager_load для решения N + 1 проблема запрос

использование включает в себя метод, как этот

clients = Client.includes(:address).limit(10) 

clients.each do |client| 
    puts client.address.postcode 
end 

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

Но прежде всего, я думаю, вы определяете ассоциации на SeatItem и билетом http://guides.rubyonrails.org/association_basics.html

Смежные вопросы