/ / N + 1 dotaz s polymorfnou asociáciou koľajníc - mysql, ruby-on-rails, databáza, výkon

Dotaz N + 1 s polymorfickou asociáciou koľajníc - mysql, ruby-on-rail, databáza, výkon

Mám dva modely.

album

class Album < ActiveRecord::Base
has_one :post, as: :post_module, dependent: :destroy
end

Príspevok (ktorý má nadpis atribút)

class Post < ActiveRecord::Base
belongs_to :post_module, polymorphic: true
end

a tu je moja šablóna

<% @albums.each do |album| %>
<tr>
<td>
<%= link_to album.post.title, edit_admin_album_path(album) %>&nbsp;<br/>
</td>
</tr>
<% end %>

Snažil som sa použiť :includes a :references aby sa zabránilo dotazu N + 1.

def index
@albums = Album.includes(:post).references(:post).to_a
end

Zdá sa však, že dotaz N + 1 sa stále vyskytuje. Čo je na tom zlé?

SQL (0.2ms)  SELECT `albums`.`id` AS t0_r0, `albums`.`product_num` AS t0_r1, `albums`.`created_at` AS t0_r2, `albums`.`updated_at` AS t0_r3, `posts`.`id` AS t1_r0, `posts`.`title` AS t1_r1, `posts`.`date` AS t1_r2, `posts`.`post_module_id` AS t1_r3, `posts`.`post_module_type` AS t1_r4, `posts`.`created_at` AS t1_r5, `posts`.`updated_at` AS t1_r6 FROM `albums` LEFT OUTER JOIN `posts` ON `posts`.`post_module_id` = `albums`.`id` AND `posts`.`post_module_type` = "Album"
Post Load (0.3ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`post_module_id` = 18 AND `posts`.`post_module_type` = "Album" ORDER BY `posts`.`id` ASC LIMIT 1
Post Load (0.2ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`post_module_id` = 20 AND `posts`.`post_module_type` = "Album" ORDER BY `posts`.`id` ASC LIMIT 1
Post Load (0.2ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`post_module_id` = 21 AND `posts`.`post_module_type` = "Album" ORDER BY `posts`.`id` ASC LIMIT 1
Post Load (0.2ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`post_module_id` = 22 AND `posts`.`post_module_type` = "Album" ORDER BY `posts`.`id` ASC LIMIT 1
Post Load (0.1ms)  SELECT `posts`.* FROM `posts` WHERE `posts`.`post_module_id` = 23 AND `posts`.`post_module_type` = "Album" ORDER BY `posts`.`id` ASC LIMIT 1

odpovede:

1 pre odpoveď č. 1

Pokúšate sa dychtivo načítať v polymorfnom združení.

Ďalšie podrobnosti nájdete na nasledujúcej stránke

Polymorfná asociácia a problémy s načítaním

prosím skús

Album.all.includes(:post => :post_module)

0 pre odpoveď č. 2

Zistite, či sa táto odpoveď týka vás

Ruby on Rails:: zahŕňa polymorfné spojenie so submodelmi