Skip to content

Instantly share code, notes, and snippets.

@camertron
Last active December 14, 2015 16:49
Show Gist options
  • Save camertron/5118265 to your computer and use it in GitHub Desktop.
Save camertron/5118265 to your computer and use it in GitHub Desktop.
Outer Join on an Association in ActiveRecord
class Project < ActiveRecord::Base
has_and_belongs_to_many :phrases
end
class Phrase < ActiveRecord::Base
has_and_belongs_to_many :projects
end
join_dependency = ActiveRecord::Associations::JoinDependency.new(Project, [:phrases], [])
manager = Arel::SelectManager.new(Phrase)
join_dependency.join_associations.each do |assoc|
assoc.join_type = Arel::OuterJoin
assoc.join_to(manager)
end
# SELECT `phrases`.* FROM `phrases`
# LEFT OUTER JOIN `phrases_projects` ON `phrases_projects`.`project_id` = `projects`.`id`
# LEFT OUTER JOIN `phrases` ON `phrases`.`id` = `phrases_projects`.`phrase_id`"
Phrase.joins(manager.join_sources).to_sql
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment