Skip to content

russ1985/has_many_polymorphic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#HasManyPolymorphic

This mixin adds a has many polymorphic relationship to a model and creates all the relationships needed by rails to handle it.

##Setup

You must define the models that you want to use inside an initializer using

RussellEdge::HasManyPolymorphic::Engine.add_models(%w(PreferenceType))

or

RussellEdge::HasManyPolymorphic::Engine.add_models("PreferenceType")

##Params

  • Name

    • name of the relationship, there is a convention that whatever name you choose, the polymorphic table columns on your through table should match.
  • Options

    • through - the model that handles the through relationship
    • models - models that should be included in this polymophic relationship

##Added methods

  • {name param}
    • the name of your relationship is used for the method name of this method. it will return an array of the models that are related via the has_many relationships

There is an after_save call back that will save the relationships when they are added or removed. If you want to remove a relationship the models need to be destroyed and this model reloaded.

##Example Usage

###Schema

create_table :zoos, :force => true do |t|
  t.string :name
end

create_table :monkeys, :force => true do |t|
  t.string :name
end

create_table :bears, :force => true do |t|
  t.string :name
end

create_table :birds, :force => true do |t|
  t.string :name
end

create_table :zoo_animals, :force => true do |t|
  t.integer :zoo_id
  t.references :animal, :polymorphic => true
end

###Class

class Zoo < ActiveRecord::Base
  has_many_polymorphic :animals,
    :through => :zoo_animals,
	:models => [:monkeys, :birds, :bears]
end

###What you get

zoo = Zoo.first
zoo.monkeys
zoo.birds
zoo.bears

and

zoo = Zoo.first
zoo.animals

which is a concatentated array of the models. You also get the following

monkey = Monkey.first
monkey.zoos
	   
bird = Bird.first
bird.zoos

bear = Bear.first
bear.zoos

About

Simple replacement for has_many_polymorphs

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published