Skip to content
Dynamically generates aliases for polymorphic associations based on the class names of those associations http://www.pluginaweek.org
Ruby
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
test
CHANGELOG
MIT-LICENSE
README
Rakefile
init.rb

README

= polymorphic_identity

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

== Resources

Wiki

* http://wiki.pluginaweek.org/Polymorphic_Identity

API

* http://api.pluginaweek.org/polymorphic_identity

Development

* http://dev.pluginaweek.org/browser/trunk/polymorphic_identity

Source

* 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)
  => #<Tag:0xb784d32c @attributes={"id"=>"1", "commentable_type"=>"Article", "commentable_id"=>"1", "commenter_type"=>"User", "commenter_id"=>"1"}>
  >> c.commentable
  => #<Article:0xb779d5a8 @attributes={"id"=>"1"}>
  >> c.article
  => #<Article:0xb779d5a8 @attributes={"id"=>"1"}>
  >> c.commenter
  => #<User:0xb775d764 @attributes={"id"=>"1"}>
  >> c.user
  => #<User:0xb775d764 @attributes={"id"=>"1"}>

== Testing

Before you can run any tests, the following gem must be installed:
* plugin_test_helper[http://wiki.pluginaweek.org/Plugin_test_helper]

To run against a specific version of Rails:

  rake test RAILS_FRAMEWORK_ROOT=/path/to/rails

== Dependencies

* Rails 2.0 or later
Something went wrong with that request. Please try again.