#ruby-on-rails #ruby #activerecord
#ruby-on-rails #ruby #activerecord
Вопрос:
В моем приложении у Parent
них много Child
ren. В ParentsController#show
я бы хотел, чтобы пользователь мог указать более одного родителя, чтобы я мог показывать всех их дочерних элементов одновременно.
В моем контроллере, учитывая, @array
который содержит три Parent
элемента с идентификаторами 1, 2 и 3, происходит вот что:
@array.map(amp;:children).reduce(amp;:or).map { |i| i.parent_id }.uniq
# => [1, 2, 3]
@array.map(amp;:children).reduce(amp;:or).map { |i| i.parent }.uniq
# => [#<Parent:0x00007faff17164b8>]
Почему возвращается только один родительский элемент? Является ли это своего рода кэшированием в действии, и если да, то как этого можно избежать? Делать что-то таким образом — это вообще плохая идея?
Ответ №1:
Вас не заставляют начинать с родительских элементов. Как насчет просто
@children = Children.where(parent: parents)
в этом случае parents представляет собой массив Parent
объектов или ActiveRecord::Relation
или
@children = Children.where(parent_id: parent_ids)
в этом случае parent_ids представляет собой массив целых чисел, идентификаторов для Parent
модели
Комментарии:
1. Для пояснения, parent_ids — это массив parent_ids
2. Да, на данный момент я выбрал аналогичное решение. Я был просто немного ошарашен, когда увидел описанное выше поведение, и не смог объяснить это самому себе.