Class: BigRecord::ArReflection::ArAssociationReflection
- Inherits:
-
MacroReflection
- Object
- MacroReflection
- BigRecord::ArReflection::ArAssociationReflection
- Defined in:
- lib/big_record/ar_reflection.rb
Overview
Holds all the meta-data about an association as it was specified in the Active Record class.
Instance Method Summary
- - (Object) association_foreign_key
- - (Object) check_validity!
- - (Object) counter_cache_column
- - (Object) klass
- - (Object) primary_key_name
-
- (Object) source_reflection
Gets the source of the through reflection.
-
- (Object) source_reflection_names
Gets an array of possible :through source reflection names.
- - (Object) table_name
- - (Object) through_reflection
Methods inherited from MacroReflection
#==, #class_name, #initialize, #macro, #name, #options
Constructor Details
This class inherits a constructor from BigRecord::ArReflection::MacroReflection
Instance Method Details
- (Object) association_foreign_key
144 145 146 |
# File 'lib/big_record/ar_reflection.rb', line 144 def association_foreign_key @association_foreign_key ||= [:association_foreign_key] || class_name.foreign_key end |
- (Object) check_validity!
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/big_record/ar_reflection.rb', line 180 def check_validity! if [:through] if through_reflection.nil? raise HasManyThroughAssociationNotFoundError.new(big_record.name, self) end if source_reflection.nil? raise HasManyThroughSourceAssociationNotFoundError.new(self) end if [:source_type] && source_reflection.[:polymorphic].nil? raise HasManyThroughAssociationPointlessSourceTypeError.new(big_record.name, self, source_reflection) end if source_reflection.[:polymorphic] && [:source_type].nil? raise HasManyThroughAssociationPolymorphicError.new(big_record.name, self, source_reflection) end unless [:belongs_to, :has_many].include?(source_reflection.macro) && source_reflection.[:through].nil? raise HasManyThroughSourceAssociationMacroError.new(self) end end end |
- (Object) counter_cache_column
148 149 150 151 152 153 154 |
# File 'lib/big_record/ar_reflection.rb', line 148 def counter_cache_column if [:counter_cache] == true "#{big_record.name.underscore.pluralize}_count" elsif [:counter_cache] [:counter_cache] end end |
- (Object) klass
124 125 126 |
# File 'lib/big_record/ar_reflection.rb', line 124 def klass @klass ||= big_record.send(:compute_type, class_name) end |
- (Object) primary_key_name
132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/big_record/ar_reflection.rb', line 132 def primary_key_name return @primary_key_name if @primary_key_name case when macro == :belongs_to @primary_key_name = [:foreign_key] || class_name.foreign_key when [:as] @primary_key_name = [:foreign_key] || "#{options[:as]}_id" else @primary_key_name = [:foreign_key] || big_record.name.foreign_key end end |
- (Object) source_reflection
Gets the source of the through reflection. It checks both a singularized and pluralized form for :belongs_to or :has_many. (The :tags association on Tagging below)
class Post has_many :tags, :through => :taggings end
175 176 177 178 |
# File 'lib/big_record/ar_reflection.rb', line 175 def source_reflection return nil unless through_reflection @source_reflection ||= source_reflection_names.collect { |name| through_reflection.klass.reflect_on_association(name) }.compact.first end |
- (Object) source_reflection_names
Gets an array of possible :through source reflection names
[singularized, pluralized]
164 165 166 |
# File 'lib/big_record/ar_reflection.rb', line 164 def source_reflection_names @source_reflection_names ||= ([:source] ? [[:source]] : [name.to_s.singularize, name]).collect { |n| n.to_sym } end |
- (Object) table_name
128 129 130 |
# File 'lib/big_record/ar_reflection.rb', line 128 def table_name @table_name ||= klass.table_name end |
- (Object) through_reflection
156 157 158 |
# File 'lib/big_record/ar_reflection.rb', line 156 def through_reflection @through_reflection ||= [:through] ? big_record.reflect_on_association([:through]) : false end |