ActiveRecord is an incredibly powerful tool but the Rails Guides doesn’t cover every possible situation and the ActiveRecord’s official documentation is huge. Find something you are looking for can be hard. If you have to do something strange and you have no time to search you have to hope someone had got the same problem and posted it on StackOverflow or on its own blog.
Recently I have to modelize a relation where a resource belongs to an entity and contemporary is related to N other entities.
The One-to-Many relation is easy: use
has_many. The other part is harder because you need to use a connection table (HABTM doesn’t work) and you need to rename relation because its name is already taken.
You can use a connection table using
has_many :connection_table has_many :items, through: :connection_table
and rename a
through relation using
has_many :related_items, through: :connection_table, source: :items
class Resource < ActiveRecord::Base belongs_to :entity has_many :connections has_many :related_entities, through: :connections, source: :entity end
class Entity < ActiveRecord::Base has_many :resources has_many :connections has_many :related_resources, through: :connections, source: :resource end
class Connection < ActiveRecord::Base belongs_to :entity belongs_to :resource end
Thanks to @olinicola for the advises 🙂