module Dynamorphic::DynamorphicSetter::ClassMethods
Public Instance Methods
belongs_to_dynamorphic(model)
click to toggle source
# File lib/dynamorphic/dynamorphic_setter.rb, line 9 def belongs_to_dynamorphic(model) define_method "#{model}=" do |args| update("#{model}_type" => args.class.name, "#{model}_id" => args.id) end define_method "#{model}" do if self.send("#{model}_type") && self.send("#{model}_id") self.send("#{model}_type").constantize.find(self.send("#{model}_id")) end end end
has_many_dynamorphic(pluralized_model, *args)
click to toggle source
# File lib/dynamorphic/dynamorphic_setter.rb, line 21 def has_many_dynamorphic(pluralized_model, *args) define_method "#{pluralized_model}" do singular_model_name = pluralized_model.to_s.singularize model = singular_model_name.camelize.constantize foreign_association_name = args.first[:as] model.where( "#{foreign_association_name}_type" => self.class.name, "#{foreign_association_name}_id" => self.id ) end define_method "add_#{pluralized_model}" do |object| singular_model_name = pluralized_model.to_s.singularize model = singular_model_name.camelize.constantize foreign_association_name = args.first[:as] if object.is_a?(Array) object.each do |single_object| single_object.update( "#{foreign_association_name}_type" => self.class.name, "#{foreign_association_name}_id" => self.id ) end else object.update( "#{foreign_association_name}_type" => self.class.name, "#{foreign_association_name}_id" => self.id ) end end end