Module: Reins::Model::Associations::ClassMethods

Defined in:
lib/reins/model/associations.rb

Instance Method Summary collapse

Instance Method Details

#belongs_to(name, class_name: nil, foreign_key: nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/reins/model/associations.rb', line 9

def belongs_to(name, class_name: nil, foreign_key: nil)
  klass_name = class_name || classify(name.to_s)
  fk = foreign_key || "#{name}_id"

  define_method(name) do
    @_associations ||= {}
    return @_associations[name] if @_associations.key?(name)

    target_id = @attributes[fk.to_s]
    @_associations[name] = target_id ? Object.const_get(klass_name).find_by(id: target_id) : nil
  end
end

#has_many(name, class_name: nil, foreign_key: nil) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/reins/model/associations.rb', line 22

def has_many(name, class_name: nil, foreign_key: nil)
  klass_name = class_name || classify(singularize(name.to_s))
  fk = foreign_key || "#{singularize(self_underscored)}_id"

  define_method(name) do
    Object.const_get(klass_name).where(fk => id)
  end
end

#has_one(name, class_name: nil, foreign_key: nil) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/reins/model/associations.rb', line 31

def has_one(name, class_name: nil, foreign_key: nil)
  klass_name = class_name || classify(name.to_s)
  fk = foreign_key || "#{singularize(self_underscored)}_id"

  define_method(name) do
    Object.const_get(klass_name).where(fk => id).first
  end
end