私は以下のような4つのモデルを持っています
- ユーザー (1 つのプロファイル、多くのコミュニティ、および多くのコードを持つ)
- プロファイル (ユーザーに属します)
- コミュニティ (多くのコードがあり、ユーザーに属します)
- コード (コミュニティとユーザーの両方に属します)
code
現在、特定のコミュニティに属するの 10 件のレコードを表示しようとしています。
これcode
には、次のような外部テーブルの情報が含まれます
username(in user table)
comment(in profile table)
point(in profile table)
現在、熱心な読み込みを使用していないため、多くの SQL クエリを発行しています。
この場合、読み込み速度を速くするためにコードをカスタマイズして、この熱心な読み込みを行うにはどうすればよいですか?
controllers/communities_controller.rb
#CanCan load_and_authorize_resouce
load_and_authorize_resource :find_by => :community_name,
models/community.rb
belongs_to :user
has_many :codes
models/code.rb
belongs_to :user, counter_cache: true
belongs_to :community, counter_cache: true
scope :recent, lambda { |n = 10| includes(:user).where('users.deleted_at' => nil).order("users.last_active_at DESC").limit(n) }
models/user.rb
has_one :profile
has_many :communities
has_many :codes
models/profile.rb
belongs_to :user
ビュー/コミュニティ/show.html.erb
<% @community.codes.recent.each do |code| %>
<%= render 'codes/code', {:code => code, :icon_photo => code.user.profile.user_avatar} %>
<% end %>
ビュー/コミュニティ/_code.html.erb
<tr>
Username: <%= code.user.username %> <br />
Code: <%= code.data %> <br />
Comment: <%= code.user.profile.comment %> <br />
Point: <%= code.user.profile.point.to_s %>
</tr>