module Dynabute::Joins::Dynabutable::ClassMethods

Public Instance Methods

join_to_fields(fields) click to toggle source
# File lib/dynabute/joins.rb, line 14
def join_to_fields(fields)
  fields.inject(self) do |me, field|
    me.joins(join_source_for_field(field))
  end
end

Private Instance Methods

dynabutee_table() click to toggle source
# File lib/dynabute/joins.rb, line 32
def dynabutee_table
  arel_table
end
join_source_for_field(field) click to toggle source
# File lib/dynabute/joins.rb, line 21
def join_source_for_field(field)
  value_table = field.value_class.arel_table.alias(field.joined_alias)
  dynabutee_table
    .join(value_table, Arel::Nodes::OuterJoin)
    .on(
      dynabutee_table[:id].eq(value_table[:dynabutable_id]).and(
      value_table[:dynabutable_type].eq(self.to_s)).and(
      value_table[:field_id].eq(field.id))
    ).join_sources
end