2010-01-17 5 views
2

Я довольно новичок в Rails, и поэтому извиняюсь, если это глупый вопрос. Я пробовал оглядываться по Сети на ответ, но я не совсем уверен в терминологии, и поэтому мне очень трудно получить ответ.Получить список связанных объектов из списка объектов

В принципе, у меня есть две модели «Группа» и «Категория». Группы has_one Категории и категории принадлежат группам. То, что я пытаюсь сделать, - получить список категорий из списка групп.

Что-то вроде этого:

@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

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))