Module: PolymorphicModel::ClassMethods
- Defined in:
- lib/polymorphic_model.rb
Instance Method Summary collapse
Instance Method Details
#define_type(t, options = {}) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/polymorphic_model.rb', line 25 def define_type(t, = {}) column = @_polymorphic_column @_model_types << t.to_sym define_method :"#{t.to_s}?" do send(column) == t.to_s end validates_type condition_hash = {column => t.to_s} if [:singleton] == true validates_uniqueness_of column, :if => :"#{t}?" self.class.instance_eval do define_method t do scope = scoped(:conditions => condition_hash) scope.first || ([:autocreate] ? create!(condition_hash) : scope) end end else named_scope(t, :conditions => condition_hash) end end |
#types ⇒ Object
13 14 15 |
# File 'lib/polymorphic_model.rb', line 13 def types @_model_types.clone.freeze end |
#validates_type ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/polymorphic_model.rb', line 17 def validates_type validates_each @_polymorphic_column, {:on => :save} do |record, attr_name, value| unless self.types.include?(value.to_sym) record.errors.add_to_base("is undefined type (#{value.to_s}), correct types are: [#{self.types.map(&:to_s).join(', ')}]") end end end |