我想根据父对象的子关联对其进行分组。我正在努力描述这个,所以我将跳到这个例子。
假设我们要按其中特有的Films组对Actors进行分组。一个参与者可以在多个组中,但该组参与者是该组独有的。
例子:

Film A
    Actor with id 34
    Actor with id 45

Film B
    Actor with id 45

Film C
    Actor with id 34
    Actor with id 45

Film D
    Actor with id 34
    Actor with id 45
    Actor with id 21

Film E
    Actor with id 34
    Actor with id 45
    Actor with id 21

Film F
    Actor with id 34

在这个例子中,我希望Film AFilm C被组合在一起,Film DFilm E被组合在一起,而Film BFilm F被单独组合在各自的组中。
如果我使用属性来执行此操作,我将使用Film.where(actor_id: id).first_or_initialize,但是这个特殊的问题需要它处理动态数量的子关联,所以我不确定如何执行。

最佳答案

我的最终解决方案其实很简单,但并不那么优雅。我存储了子关联(Actors)的唯一排序数组的字符串格式,并使用它来find_or_initialize组。
我使用nested attributes来保存attributes数组中的参与者,我发现它稍微快一点,因为它使用INSERT INTO

film = Film.find(some_id)
actor_ids = film.actors.map {|a| a.id}.sort.uniq
attributes = []
for id in actor_ids
  attributes << {actor_id: id}
end
film_group = FilmGroup.where(actor_array: actor_ids.to_s).first_or_initialize
film_group.update(actor_count: actor_ids.count, actors_attributes: attributes, films_attributes: [{film_id: film.id}])

我相信有更好的办法。。但这行得通。

关于ruby-on-rails - 按唯一的 child 协会分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29703752/

10-14 19:32