Class: AssociationBuilder::HasManyThroughActiveResources

Inherits:
Object
  • Object
show all
Defined in:
lib/active_resource_associatable/has_many_through_activeresources.rb

Class Method Summary collapse

Class Method Details

.build(model, table_name, options) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/active_resource_associatable/has_many_through_activeresources.rb', line 5

def self.build(model, table_name, options)
  middle_table = options[:through].to_s
  klass_name = table_name.to_s
  model.class_eval do
    define_method(klass_name) do
      if self.is_a?(ActiveResource::Base)
        associated_ids = middle_table.classify.constantize.where("#{model.element_name.gsub('_resource', '')}_id = ?", self.id).pluck("#{klass_name.singularize}_id".to_sym)
        klass_name.classify.constantize.where(id: associated_ids)
      elsif self.is_a?(ActiveRecord::Base)
        associated_ids = middle_table.classify.constantize.where("#{model.table_name.singularize}_id = ?", self.id).pluck("#{klass_name.singularize}_id".to_sym)
        options[:class_name].classify.constantize.find(:all, params:{id: associated_ids})
      end
    end
  end
end