Easily share variables between Rails models with inheritance.
➜ ~ gem install has_inherited
(NOTE: has_inherited 2.x or greater only works with Rails 3. If you need Rails 2.x support please use has_inherited 1.0) The intention of this library is to make it easy to inherit particular variables between models in rails apps. We start with a parent model that will function as a pseudo-polymorphic association for children objects.
class Seo < ActiveRecord::Base is_inheritable end
Use the following as a migration guideline. Note: The table structure is important.
create_table :seos do |t| t.integer :inheritable_id t.string :inheritable_type t.string :name, :limit => 50, :null => false t.string :value t.string :value_type end
class Industry < ActiveRecord::Base has_inherited :seo, :from => Seo has_many :clients end
This gives industry instances access to the seo namespace from the Seo object. In this case it will end up being ‘industry.seo.X`
class Client < ActiveRecord::Base belongs_to :industry has_many :stores has_inherited :seo, :from => [:industry, :seo], :inherit_class => 'Seo' end
This gives client instances access to the seo namespace from its associated industry. You also have to specify the ‘:inherit_class` so we know what table to look up.
#Set the SEO global title #Seo.global.title = "SEO Title" #Grab that child industry title industry.seo.title # => 'SEO Title' #Grab the client title client.seo.title # => 'SEO Title' #Change the industry title industry.seo.title = 'Industry Title' #Check the client client.seo.title # => 'Industry Title' #Grab all the Keys for the client client.seo.all # => {:title=>"Industry Title"} #Grab all the non-inherited keys from the client client.seo.all(false) # => {}
-
Fork the project.
-
Make your feature addition or bug fix.
-
Add tests for it. This is important so I don’t break it in a future version unintentionally.
-
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
-
Send me a pull request. Bonus points for topic branches.
Copyright © 2010 Mark Turner. See LICENSE for details.