2015-05-02 45 views
0

我有2種型號選擇唯一值Rails的:球員和項目</p> <p>機型號:</p> <pre><code>class Player < ActiveRecord::Base has_many :items end </code></pre> <p>產品型號:從2種型號belongs_to的和的has_many關係

class Item < ActiveRecord::Base 
    belongs_to :player 
end 

我m試圖存儲創建5個最新項目的唯一播放器(僅其編號和名稱)的數組。

它的工作原理,如果我做一個循環,並做查詢逐個

Item.order('created_at DESC').limit(5).first.player.id 
Item.order('created_at DESC').limit(5).first.player.name 

但我不知道是否有使用動物內臟做的查詢,而無需一個循環的方式,也只需要唯一值的球員?

謝謝!

回答

0

你想得到一組創建5個最近物品的獨特玩家,或者你想獲得創建物品的5個最近唯一玩家陣列嗎?

後者總是會返回5個玩家(當你有5個或更多玩家創建物品時),前者可能只返回一個玩家(因爲他可能創建了5個最新物品)。

如果你想在最近5項的玩家,試試這個:如果你想在最近5名獨特的球員that've創建項目

player_ids = Item.order(created_at :desc).limit(5).pluck(:player_id).uniq 
Player.where(id: player_ids).pluck(:id, :name) 

,試試這個:

player_ids = Item.order(created_at :desc).pluck(:player_id).uniq.first(5) 
Player.where(id: player_ids).pluck(:id, :name) 

您甚至可以使用joinplayer關聯。需要注意的是你有在現在的pluck使用表名:

Item.joins(:player).order(created_at :desc).limit(5).pluck('players.id', 'players.name').uniq 

Item.joins(:player).order(created_at :desc).pluck('players.id', 'players.name').uniq.first(5) 
+0

我想要的是第二個,它總是會返回5名玩家。非常好,謝謝! – siang

相關問題