Group_by в ассоциации принадлежащих к - PullRequest
3 голосов
/ 21 мая 2009

Я хотел бы использовать метод group_by, но вместо использования столбца в базе данных:

@posts.group_by(&:date)

Я хочу что-то вроде:

@posts.group_by (&: автор)

Где пост принадлежит автору.

Я просто не уверен в синтаксисе?

Ответы [ 2 ]

5 голосов
/ 21 мая 2009

Вы можете написать в своей модели:

def author_name
  self.author.name
end

, а затем

@posts.group_by(&:author_name)
1 голос
/ 21 мая 2009

В этом случае, вероятно, вы могли бы просто сделать

@posts.group_by(&:author_id)

В более общем смысле, вы можете передать блок group_by, поэтому, если вам нужно сгруппировать по некоторой произвольной логике:

@posts.group_by { |post|
  ... some code returning a value to group this post by ...
} 

Как и следует надеяться, в прошлый раз, когда я смотрел, реализация group_by сохраняет относительный порядок данных, передаваемых в него, что может быть полезно запомнить, поскольку позволяет сортировать данные в «плоском» списке сообщений, а затем, когда вы группируете их, порядок сохраняется внутри группировок, а не сортируется по вложенным данным, выводимым group_by.

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