polymorphic identity plugin

Plugin details

polymorphic_identity dynamically generates aliases for polymorphic associations based on the class names of those associations.

Websitehttp://wiki.pluginaweek.org/Polymorphic_identity Repositoryhttp://svn.pluginaweek.org/trunk/polymorphic_identity Author Aaron Pfeifer Tags class, name, association LicenseMIT

Documentation

Install the plugin:
ruby script/plugin install http://svn.pluginaweek.org/trunk/polymorphic_identity

Description
===============

Polymorphic associations are not very descriptive when it comes to easily knowing the type of model your interacting with. For example, a typical polymorphic assocation looks like the following:

  class Tag < ActiveRecord::Base
    belongs_to :taggable,
                 :polymorphic => true
  end


When getting the taggable record, you would normally have to called tag.taggable. However, if you know that the taggable record is just an instance of the Article model, then it would feel more comfortable if you could just called tag.article. polymoprhic_identity makes this possible by dynamically checking the name of the polymorphic record's class and creating methods that allow you to access the polymorphic association based on that class name.

Usage
==========

Example
-----------

  class Comment < ActiveRecord::Base
    belongs_to :commentable,
                 :polymorphic => true
    belongs_to :commenter,
                 :polymorphic => true
  end
  
  class Article < ActiveRecord::Base
    has_many :comments, :as => :commentable
  end
  
  class User < ActiveRecord::Base
    has_many :comments,
               :as => :commenter
  end


  >> c = Comment.find(1)
  => #"1", "commentable_type"=>"Article", "commentable_id"=>"1", "commenter_type"=>"User", "commenter_id"=>"1"}>
  >> c.commentable
  => #"1"}>
  >> c.article
  => #"1"}>
  >> c.commenter
  => #"1"}>
  >> c.user
  => #"1"}>

Further Documentation

There is currently no advanced documentation for this plugin.

New documentation

Edit plugin | Back in time (1 older version) | Last edited by: obrie572, 5 days ago