Method: Puffs::SQLRelation#load_includes

Defined in:
lib/relation.rb

#load_includes(relation) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/relation.rb', line 109

def load_includes(relation)
  includes_params.each do |param|
    next unless relation.klass.has_association?(param)

    puts "LOADING #{param}"
    assoc = klass.assoc_options[param]
    f_k = assoc.foreign_key
    p_k = assoc.primary_key
    includes_table = assoc.table_name.to_s
    in_ids = relation.collection.map(&:id).join(', ')
    has_many = assoc.class == HasManyOptions

    results = Puffs::DBConnection.execute("      SELECT\n        \#{includes_table}.*\n      FROM\n        \#{includes_table}\n      WHERE\n        \#{includes_table}.\#{has_many ? f_k : p_k}\n      IN\n        (\#{in_ids});\n    SQL\n    included = assoc.model_class.parse_all(results)\n    SQLRelation.build_association(relation, included, param)\n  end\n\n  relation\nend\n")