No commit activity in last 3 years
No release in over 3 years
Simple replacement for has_many_polymorphs
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

<= 5.3
~> 3.7.2
~> 0.15.1
 Project Readme

#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