У меня есть запрос *, который приводит к следующему:
#<ActiveRecord::Relation [
#<BookRank id: 2, book_id: 2, list_edition_id: 1, rank_world: 5, rank_europe: 1>,
#<BookRank id: 3, book_id: 1, list_edition_id: 1, rank_world: 6, rank_europe: 2>,
#<BookRank id: 8, book_id: 2, list_edition_id: 3, rank_world: 1, rank_europe: 1>,
#<BookRank id: 9, book_id: 1, list_edition_id: 3, rank_world: 2, rank_europe: 2
]>
То, что я пытаюсь получить, это хеш-код:
{
book_id => {
list_edition_id => {
"rank_world" => value,
"rank_europe" => value
}
}
}
(Вишня сверху должна была бы упорядочить хеш по значению rank_world для самого низкого list_edition_id, но, возможно, это может быть слишком сложно.)
ranks_relation.group_by(&:book_id)
дает мне хэш, где book_ids
являются ключами, но затем данные рангов все еще находятся в массивах:
{
2 => [
#<BookRank id: 2, book_id: 2, list_edition_id: 1, rank_world: 5, rank_europe: 1>,
#<BookRank id: 8, book_id: 2, list_edition_id: 3, rank_world: 1, rank_europe: 1>
],
1 => [
#<BookRank id: 3, book_id: 1, list_edition_id: 1, rank_world: 6, rank_europe: 2>
#<BookRank id: 9, book_id: 1, list_edition_id: 3, rank_world: 2, rank_europe: 2>
]
}
Как мне поступить?
* РЕДАКТИРОВАТЬ: Это структура модели и запрос. Другой пользователь спросил об этом:
class Book < ActiveRecord::Base
has_many :book_ranks, dependent: :destroy
end
class List < ActiveRecord::Base
has_many :list_editions, dependent: :destroy
end
class ListEdition < ActiveRecord::Base
belongs_to :list
has_many :book_ranks, dependent: :destroy
end
class BookRank < ActiveRecord::Base
belongs_to :book
belongs_to :list_edition
has_one :list, through: :list_edition
end
Для запроса я уже использую два массива с соответствующими идентификаторами для Book
и ListEdition
:
BookRank.where(:book_id => book_ids, :list_edition_id => list_edition_ids)