# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 103 def primary_key_default "_id" end
class ActiveMongoid::Associations::RecordRelation::Referenced::Many
Private Class Methods
builder(base, meta, object)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 111 def builder(base, meta, object) ActiveMongoid::Associations::Builders::Many.new(base, meta, object || []) end
criteria(metadata, object, type = nil)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 115 def criteria(metadata, object, type = nil) crit = metadata.klass.where(metadata.foreign_key => object.to_s) if metadata.polymorphic? crit = crit.where(metadata.type => type.name) end crit end
foreign_key(name)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 91 def foreign_key(name) "#{name}#{foreign_key_suffix}" end
foreign_key_default()
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 95 def foreign_key_default nil end
foreign_key_suffix()
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 99 def foreign_key_suffix "_id" end
macro()
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 107 def macro :has_many_records end
primary_key_default()
click to toggle source
stores_foreign_key?()
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 87 def stores_foreign_key? false end
Private Instance Methods
binding()
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 13 def binding Bindings::Many.new(base, target, __metadata__) end
criteria()
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 9 def criteria Many.criteria(__metadata__, base.send(__metadata__.primary_key), base.class) end
matches?(obj, conditions)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 53 def matches?(obj, conditions) conditions.all? {|key, value| obj.attributes[key] == value} end
method_missing(name, *args, &block)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 75 def method_missing(name, *args, &block) if target.respond_to?(name) target.send(name, *args, &block) else criteria.scoping do criteria.public_send(name, *args, &block) end end end
persist_delayed(objs, inserts)
click to toggle source
TODO: look into AR analog to collection insert
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 18 def persist_delayed(objs, inserts) unless objs.empty? # collection.insert(inserts) inserts.each do |insert| insert.save end objs.each do |obj| # obj.save # obj.post_persist end end end
remove_all(conditions = nil, method = :delete_all)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 42 def remove_all(conditions = nil, method = :delete_all) conditions = conditions || {} removed = klass.send(method, conditions.merge!(criteria.where_values_hash)) target.delete_if do |obj| if matches?(obj, conditions) unbind_one(obj) and true end end removed end
remove_not_in(ids)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 57 def remove_not_in(ids) removed = criteria.where("id not in (?)", ids) if __metadata__.destructive? removed.delete_all else removed.update_all(__metadata__.foreign_key => nil) end in_memory.each do |obj| if !ids.include?(obj.id) unbind_one(obj) target.delete(obj) if __metadata__.destructive? obj.mark_for_destruction end end end end
save_or_delay(obj, objs, inserts)
click to toggle source
# File lib/active_mongoid/associations/record_relation/referenced/many.rb, line 31 def save_or_delay(obj, objs, inserts) if obj.new_record? && obj.valid?(:create) # obj.run_before_callbacks(:save, :create) obj.save objs.push(obj) inserts.push(obj) else obj.save end end