Получить Activerecord список связанных объектов из списка объектов - PullRequest
2 голосов
/ 17 января 2010

Я довольно новичок в 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 ]

4 голосов
/ 11 ноября 2015

Это должно быть намного быстрее

@categories = Category.where(id: @groups.pluck(:category_id))
3 голосов
/ 17 января 2010

Я понимаю! Трудно понять, что искать, когда ты не знаешь, как это называется. Это легко сделать с помощью чистого Ruby, с помощью метода экземпляра map класса Array:

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

Сокращенный подход к этому:

categories = groups.map(&:category)

Метод массива map вызывает данный блок для каждого элемента и сворачивает все возвращаемые значения в массив.

1 голос
/ 17 января 2010

Я не могу придумать какой-нибудь магический код для вставки , но вы без труда создадите список без этого магического кода.

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

@categories теперь содержит список всех категорий (каждая включается только один раз).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...