Traverse an ActiveRecord relation along an association
returns a new relation by "pivoting" around a named association.
Say we have a
Post model and each
Post belongs to an author:
class Post < ActiveRecord::Base belongs_to :author end
To turn a relation of posts into a relation of its authors:
posts = Post.where(:archived => false) authors = posts.traverse_association(:author)
You can traverse multiple associations in a single call.
E.g. to turn a relation of posts into a relation of all posts of their authors:
posts = Post.where(:archived => false) posts_by_same_authors = posts.traverse_association(:author, :posts)
The traversal is achieved internally by collecting all foreign keys in the current relation
and return a new relation with an
IN(...) query (which is very efficient even for many thousand keys).
This means every association that you pivot around will trigger one SQL query.
Flaky tests are tests that sometimes fail for no obvious reason. They are the plague of many end-to-end (E2E) test suites that automate the browser through tools like Capybara and Selenium.
Join our free training event and learn to fix any flaky test suite, even in large legacy applications.