1

ゲームの予告編のサイトを作成し、フロントページでゲームをカテゴリ別に整理しているので、最終的には次のようになります(レール)。

  def index
    @newGames = Game.order("created_at DESC").limit(3)
    @casualGames = Game.where("category = 'casual'").limit(9)
    @actionGames = Game.where("category = 'action'").limit(8)
    @strategyGames = Game.where("category = 'strategy'").limit(9)
    @adventureGames = Game.where("category = 'adventure'").limit(8)
    @puzzleGames = Game.where("category = 'puzzle'").limit(9)
  end

同じことを達成する方法はありますが、セーブルテーブルに対して6つの個別のクエリを実行する必要はありませんか?

ありがとう

4

1 に答える 1

0

検索パラメータが異なるため、DBに複数回クエリを実行することは避けられません。ただし、コントローラーをスキニーにすることはできます。Gameクラスでクラスメソッドを作成し、必要なものをすべて収集してハッシュで返します。

Game.rb

def self.for_index_page
    games = {}
    games.merge!(new: order("created_at DESC").limit(3))
    games.merge!(casual: category_with_limit('casual', 9)
    games.merge!(action: category_with_limit('action', 8)
    ...
end

def self.category_with_limit(category, limit)
    where(category: category).limit(limit)
end

GamesController.rb

def index
    @games = Game.for_index_page
end

index.erb

<%=@games[:new] %>
<%=@games[:casual] %>

...
于 2012-09-17T08:57:57.807 に答える