No release in over 3 years
A Ruby on Rails concern that provides a simple way to create aliases for ActiveRecord associations, including both getter and setter methods.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 13.0
~> 3.0
~> 1.4

Runtime

 Project Readme

AliasAssociation

Gem Version RSpec

AliasAssociation is a Ruby on Rails concern that provides a simple way to create aliases for ActiveRecord associations, including both getter and setter methods.

Installation

Add this line to your application's Gemfile:

gem 'alias_association'

And then execute:

bundle install

Usage

Include the AliasAssociation concern in your ActiveRecord model and use the alias_association class method to create aliases for existing associations.

class Order < ApplicationRecord
  include AliasAssociation

  belongs_to :user
  belongs_to :income_payment_system, class_name: 'PaymentSystem'
  belongs_to :outcome_payment_system, class_name: 'PaymentSystem'

  # Create aliases for associations
  alias_association :owner, :user
  alias_association :payment_system_from, :income_payment_system
  alias_association :payment_system_to, :outcome_payment_system
end

Now you can use the aliases just like the original associations:

order = Order.first

# Getter methods
order.owner        # equivalent to order.user
order.payment_system_from  # equivalent to order.income_payment_system
order.payment_system_to    # equivalent to order.outcome_payment_system

# Setter methods
order.owner = User.find(2)        # equivalent to order.user = User.find(2)
order.payment_system_from = ps    # equivalent to order.income_payment_system = ps
order.payment_system_to = ps      # equivalent to order.outcome_payment_system = ps

Error Handling

The concern validates that the original association exists before creating the alias:

class Order < ApplicationRecord
  include AliasRelationship

  # This will raise an ArgumentError if :nonexistent_association doesn't exist
  alias_association :alias_name, :nonexistent_association
  # => ArgumentError: Association :nonexistent_association not found

Debug Information

You can retrieve information about association aliases for debugging purposes:

Order.association_aliases
# => { owner: :user, payment_system_from: :income_payment_system, payment_system_to: :outcome_payment_system }

API Reference

alias_association(new_name, original_name)

Creates an alias for an existing ActiveRecord association.

  • new_name (Symbol) - The name for the new alias
  • original_name (Symbol) - The name of the existing association to alias

Raises: ArgumentError if the original association doesn't exist

association_aliases

Returns a hash containing information about all association aliases for the model.

Returns: Hash with alias names as keys and original association names as values

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/dapi/alias_association.

License

The gem is available as open source under the terms of the MIT License.