Class: ActiveRecord::Associations::AssociationCollection
- Inherits:
-
Object
- Object
- ActiveRecord::Associations::AssociationCollection
show all
- Defined in:
- lib/active_record/associations/association_collection.rb
Overview
Instance Method Summary
collapse
Constructor Details
#initialize(owner, association_name, association_class_name, association_class_primary_key_name, options) ⇒ AssociationCollection
Returns a new instance of AssociationCollection.
7
8
9
10
11
12
13
|
# File 'lib/active_record/associations/association_collection.rb', line 7
def initialize(owner, association_name, association_class_name, association_class_primary_key_name, options)
@owner = owner
@options = options
@association_name = association_name
@association_class = eval(association_class_name)
@association_class_primary_key_name = association_class_primary_key_name
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(symbol, *args, &block) ⇒ Object
15
16
17
18
|
# File 'lib/active_record/associations/association_collection.rb', line 15
def method_missing(symbol, *args, &block)
load_collection
@collection.send(symbol, *args, &block)
end
|
Instance Method Details
#<<(*records) ⇒ Object
Also known as:
push, concat
Add records to this association. Returns self so method calls may be chained.
Since << flattens its argument list and inserts each record, push and concat behave identically.
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/active_record/associations/association_collection.rb', line 39
def <<(*records)
@owner.transaction do
flatten_deeper(records).each do |record|
raise_on_type_mismatch(record)
insert_record(record)
@collection << record if loaded?
end
end
self
end
|
#delete(*records) ⇒ Object
Remove records from this association. Does not destroy records.
55
56
57
58
59
60
61
62
63
|
# File 'lib/active_record/associations/association_collection.rb', line 55
def delete(*records)
records = flatten_deeper(records)
@owner.transaction do
records.each { |record| raise_on_type_mismatch(record) }
delete_records(records)
records.each { |record| @collection.delete(record) } if loaded?
end
end
|
#destroy_all ⇒ Object
65
66
67
68
69
70
71
|
# File 'lib/active_record/associations/association_collection.rb', line 65
def destroy_all
@owner.transaction do
each { |record| record.destroy }
end
@collection = []
end
|
#empty? ⇒ Boolean
77
78
79
|
# File 'lib/active_record/associations/association_collection.rb', line 77
def empty?
size == 0
end
|
#proxy_respond_to? ⇒ Object
4
|
# File 'lib/active_record/associations/association_collection.rb', line 4
alias_method :proxy_respond_to?, :respond_to?
|
33
34
35
|
# File 'lib/active_record/associations/association_collection.rb', line 33
def reload
@collection = nil
end
|
#respond_to?(symbol, include_priv = false) ⇒ Boolean
25
26
27
|
# File 'lib/active_record/associations/association_collection.rb', line 25
def respond_to?(symbol, include_priv = false)
proxy_respond_to?(symbol, include_priv) || [].respond_to?(symbol, include_priv)
end
|
#size ⇒ Object
Also known as:
length
73
74
75
|
# File 'lib/active_record/associations/association_collection.rb', line 73
def size
if loaded? then @collection.size else count_records end
end
|
20
21
22
23
|
# File 'lib/active_record/associations/association_collection.rb', line 20
def to_ary
load_collection
@collection.to_ary
end
|
#uniq(collection = self) ⇒ Object
81
82
83
|
# File 'lib/active_record/associations/association_collection.rb', line 81
def uniq(collection = self)
collection.inject([]) { |uniq_records, record| uniq_records << record unless uniq_records.include?(record); uniq_records }
end
|