2010-01-17 186 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))