Module: Mongoid::UnscopedBelongsTo::ClassMethods

Defined in:
lib/mongoid/unscoped_belongs_to.rb

Instance Method Summary collapse

Instance Method Details

#unscoped_belongs_to(field, args = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/mongoid/unscoped_belongs_to.rb', line 6

def unscoped_belongs_to(field, args = {})
  belongs_to field, args

  define_method field do
    field_id = send("#{field}_id")
    field_name = "@#{field}"
    return nil if field_id.nil?

    cur_value = instance_variable_get field_name
    return cur_value if cur_value.present?

    clazz = Object.const_get self.relations[field.to_s].class_name
    cur_value = clazz.unscoped.find field_id
    return instance_variable_set field_name, cur_value
  end

  mongoid_setter = instance_method("#{field}=")
  define_method "#{field}=" do |field_value|
    instance_variable_set "@#{field}", field_value
    mongoid_setter.bind(self).call(field_value)
  end
end