Module: ActiveRecord::VirtualAttributes::VirtualArel::ClassMethods

Defined in:
lib/active_record/virtual_attributes/virtual_arel.rb

Instance Method Summary collapse

Instance Method Details

#arel_for_virtual_attribute(column_name, table) ⇒ Nil|Arel::Nodes::Grouping

private api

Returns:

  • (Nil|Arel::Nodes::Grouping)

    for virtual attributes:

    returns the arel for the column
    

    for non sql friendly virtual attributes:

    returns nil
    


82
83
84
85
86
87
88
89
90
# File 'lib/active_record/virtual_attributes/virtual_arel.rb', line 82

def arel_for_virtual_attribute(column_name, table) # :nodoc:
  arel_lambda = _virtual_arel[column_name.to_s]
  return unless arel_lambda

  arel = arel_lambda.call(table)
  arel = Arel::Nodes::Grouping.new(arel) unless arel.kind_of?(Arel::Nodes::Grouping)
  arel.name = column_name
  arel
end

#arel_tableObject

ActiveRecord::Core 6.1



55
56
57
# File 'lib/active_record/virtual_attributes/virtual_arel.rb', line 55

def arel_table
  @arel_table ||= ArelTableProxy.new(table_name, :type_caster => type_caster).tap { |t| t.klass = self }
end

#attribute_supported_by_sql?(name) ⇒ Boolean

supported by sql if any are true:

  • it is an attribute alias

  • it is an attribute that is non virtual

  • it is an attribute that is virtual and has arel defined

Returns:

  • (Boolean)


69
70
71
72
73
# File 'lib/active_record/virtual_attributes/virtual_arel.rb', line 69

def attribute_supported_by_sql?(name)
  load_schema
  try(:attribute_alias?, name) ||
    (has_attribute?(name) && (!virtual_attribute?(name) || !!_virtual_arel[name.to_s]))
end