class ReeDao::Association
def one_to_many(parent_dao, assoc_name, list, primary_key: nil, foreign_key: nil, scope: nil, setter: nil, to_dto: nil)
def one_to_many(parent_dao, assoc_name, list, primary_key: nil, foreign_key: nil, scope: nil, setter: nil, to_dto: nil) return {} if list.empty? primary_key ||= :id if scope.is_a?(Array) items = scope else assoc_dao = nil assoc_dao = find_dao(assoc_name, parent, scope) if !foreign_key if parent_dao.nil? raise ArgumentError.new("foreign_key should be provided for :#{assoc_name} association") end foreign_key = foreign_key_from_dao(parent_dao) end root_ids = list.map(&:"#{primary_key}") scope ||= assoc_dao scope = scope.where(foreign_key => root_ids) items = add_scopes(scope, global_opts[assoc_name]) end assoc = if foreign_key group_by(items) { _1.send(foreign_key) } else items end populate_association( list, assoc, assoc_name, setter: setter, primary_key: primary_key, foreign_key: foreign_key, to_dto: to_dto, multiple: true ) assoc end