Как объединить несколько объектов из разных моделей в один объект в Rails? - PullRequest
0 голосов
/ 12 января 2019

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

Дело в том, чтобы создать «поток» или «канал» контента приложения, как в Facebook.

Подробно, каждая запись имеет несколько и разные столбцы. Это модели и колонки:

  • Продукт [название, цена]

  • Пост [слоган, изображение]

  • Пользователь [имя, имя пользователя, profilepic]

  • Выбор [название, слоган]

Код, который я пробовал:

@new_object = @product = Product.find(n) + @post = Product.find(n) + @member = Member.find(n) + @selection = Selection.find(n)

Но это не работает из-за различий полей. Я думаю, что мы должны отобразить в хэш?

Вот как я буду использовать конечный объект:

@new_object.each do |stream|
  stream.foo
  stream.bar
end

Итак, цель: взять каждую запись и отобразить содержимое с помощью .each Роскошь: есть возможность случайной сортировки результатов.

Большое спасибо!

1 Ответ

0 голосов
/ 13 января 2019

Вы можете создать PORO (обычный старый объект ruby) для представления комбинированного объекта, например:

class Stream 
  attr_accessor :product, :post, :member, :selection

  def initialize(attrs)
    assign_attributes(attrs)
  end
end

Затем просто инициализируйте и создайте столько stream объектов, сколько вам нужно, используя Stream.new(attrs). Вы можете создать массив из stream объектов и прокрутить их, чтобы отобразить или показать несколько stream данных.

Для сортировки массива объектов по его атрибутам вы можете использовать

objects.sort_by {|obj| obj.attribute}

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