2010-01-17 214 views
2

我對Rails相當陌生,所以如果這是一個愚蠢的問題,我很抱歉。我試着在網上尋找答案,但我對術語不太確定,所以我很難找到答案。從對象列表中獲取Activerecord關聯對象列表

基本上,我有兩個模型「組」和「類別」。組has_one類別和類別belongs_to組。我想要做的是從組列表中獲取類別列表。

像這樣:

@groups = Group.find(:所有)
@categories = @groups。 < <插入魔術代碼來獲取類別>>

所以我可以做這樣的事情在一個觀點:

<% @categories.each do |cat| %> 
    <%= cat.title %> 
<% end %> 

的問題是,我不能爲我的雞找出魔法代碼,甚至正是我需要尋找的東西來學習如何去做。

事情我已經嘗試:

@categories = @groups.categories 
@categories = @groups.category 
@categories = @groups.category.find(:all, :select => 'title') 
@categories = Category.find(:all, @groups.categories) 
@categories = Category.find(:all, @groups.categories.find(:all, :select => 'title')) 

和其他各種需要以上。

我真的很感謝一個解決方案和/或指針,我可以在這裏爲自己學習!

非常感謝你

回答

3

我明白了!當你不知道它叫什麼時,很難知道要搜索什麼。這很容易用純Ruby完成的,與所述陣列類的map實例方法:

categories = groups.map{|g| g.category} 

甲速記方法是這樣的:

categories = groups.map(&:category) 

map陣列方法調用給定塊的每個元素,並將所有返回值滾動到一個數組中。

+0

非常感謝你,海梅,該工作一種享受! – SaucyK 2010-01-17 20:40:38

1

我想不出一些魔術代碼來插入,但是你可以很容易地創建沒有這個魔術代碼的列表。

@categories = [] 
@groups.each do |group| 
    @categories << @group.category unless @categories.include?(@group.category) 
end 

@categories現在包含所有類別的列表(每個只包含一次)。

4

這應該是更快

@categories = Category.where(id: @groups.pluck(:category_id))