Model view controller Rails将查询从视图移动到控制器
获取视图和控制器的以下代码:Model view controller Rails将查询从视图移动到控制器,model-view-controller,ruby-on-rails-3,Model View Controller,Ruby On Rails 3,获取视图和控制器的以下代码: # matches/show.html.haml %h3 Players -@clans.each do |clan| %h4=link_to clan.name, clan %ul -@players.find_all_by_clan_id(clan.id).each do |player| %li %strong=link_to player.name, player %h3 -@rounds.each_wi
# matches/show.html.haml
%h3
Players
-@clans.each do |clan|
%h4=link_to clan.name, clan
%ul
-@players.find_all_by_clan_id(clan.id).each do |player|
%li
%strong=link_to player.name, player
%h3
-@rounds.each_with_index do |round,index|
%h4
Round
=index+1
-@clans.each do |clan|
%h4=clan.name
%ul
-round.participations.includes(:player,:champion).find_all_by_clan_id(clan.id).each do |participation|
%li
=participation.player.name
=participation.champion.name
# matches_controller.rb
class MatchesController < ApplicationController
def index
@matches = Match.played.includes(:clans).page(params[:page])
end
def show
@match = Match.includes(:rounds,:clans).find(params[:id])
@clans = @match.clans
@rounds = @match.rounds
@players = @match.players
end
end
如何将所有不必要的数据库查询、逻辑等从视图移动到控制器?
也许可以简化它?将其移动到匹配模型,而不是控制器。控制器通常只应包含路由逻辑和设置要在视图中使用的实例变量。大部分代码应该放在模型中。瘦的控制器,胖的模型 仔细阅读范围: 此外,本文来自2006年的pre scopes,但大部分内容仍然与您的问题相关: 你真的不需要为氏族、回合和玩家设置实例变量。在迭代关联集合的简单情况下,可以直接从@match访问这些内容。例如:
-@match.clans.each do |clan|
否则,如果某个范围比简单范围更复杂,则使用该范围