Class: ActiveRecord::Associations::HasManyAssociation
Overview
Instance Method Summary
collapse
#concat, #destroy_all, #empty?, #method_missing, #proxy_respond_to?, #reload, #respond_to?, #size, #to_ary
Constructor Details
#initialize(owner, association_name, association_class_name, association_class_primary_key_name, options) ⇒ HasManyAssociation
Returns a new instance of HasManyAssociation.
4
5
6
7
8
9
10
11
12
13
14
15
|
# File 'lib/active_record/associations/has_many_association.rb', line 4
def initialize(owner, association_name, association_class_name, association_class_primary_key_name, options)
super(owner, association_name, association_class_name, association_class_primary_key_name, options)
@conditions = options[:conditions]
if options[:finder_sql]
@counter_sql = options[:finder_sql].gsub(/SELECT (.*) FROM/, "SELECT COUNT(*) FROM")
@finder_sql = options[:finder_sql]
else
@counter_sql = "#{@association_class_primary_key_name} = '#{@owner.id}'#{@conditions ? " AND " + @conditions : ""}"
@finder_sql = "#{@association_class_primary_key_name} = '#{@owner.id}' #{@conditions ? " AND " + @conditions : ""}"
end
end
|
Instance Method Details
#<<(record) ⇒ Object
17
18
19
20
21
22
|
# File 'lib/active_record/associations/has_many_association.rb', line 17
def <<(record)
raise ActiveRecord::AssociationTypeMismatch unless @association_class === record
record.send(@association_class_primary_key_name + "=", @owner.id)
record.save(false)
@collection_array << record unless @collection_array.nil?
end
|
#build(attributes = {}) ⇒ Object
44
45
46
47
48
|
# File 'lib/active_record/associations/has_many_association.rb', line 44
def build(attributes = {})
association = @association_class.new
association.attributes = attributes.merge({ "#{@association_class_primary_key_name}" => @owner.id})
association
end
|
#create(attributes = {}) ⇒ Object
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/active_record/associations/has_many_association.rb', line 33
def create(attributes = {})
record = @association_class.new(attributes || {})
record.send(@association_class_primary_key_name + "=", @owner.id)
record.save
@collection_array << record unless @collection_array.nil?
return record
end
|
#delete(records) ⇒ Object
24
25
26
27
28
29
30
31
|
# File 'lib/active_record/associations/has_many_association.rb', line 24
def delete(records)
duplicated_records_array(records).each do |record|
next if record.send(@association_class_primary_key_name) != @owner.id
record.send(@association_class_primary_key_name + "=", nil)
record.save(false)
@collection_array.delete(record) unless @collection_array.nil?
end
end
|
#find(association_id = nil, &block) ⇒ Object
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/active_record/associations/has_many_association.rb', line 65
def find(association_id = nil, &block)
if block_given? || @options[:finder_sql]
load_collection_to_array
return @collection_array.send(:find, &block)
else
@association_class.find_on_conditions(
association_id, "#{@association_class_primary_key_name} = '#{@owner.id}' #{@conditions ? " AND " + @conditions : ""}"
)
end
end
|
#find_all(runtime_conditions = nil, orderings = nil, limit = nil, joins = nil, &block) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/active_record/associations/has_many_association.rb', line 50
def find_all(runtime_conditions = nil, orderings = nil, limit = nil, joins = nil, &block)
if block_given? || @options[:finder_sql]
load_collection_to_array
@collection_array.send(:find_all, &block)
else
@association_class.find_all(
"#{@association_class_primary_key_name} = '#{@owner.id}' " +
"#{@conditions ? " AND " + @conditions : ""} #{runtime_conditions ? " AND " + runtime_conditions : ""}",
orderings,
limit,
joins
)
end
end
|