NoBrainer

A Ruby ORM for RethinkDB

Joins

Performing Inner Table Joins

NoBrainer allows inner table joins on associations with join().

Suppose we have posts and comments:

class Author
  include NoBrainer::Document
  has_many :posts
end

class Post
  include NoBrainer::Document
  belongs_to :author
  has_many :comments
end

class Comment
  include NoBrainer::Document
  belongs_to :post
end

join() accepts arrays and hashes to describe the associations to join, similarly to eager_load().

Examples

The first example shows a table join on a belongs_to association between posts and authors:

Post.join(:author).each do |post|
  author = post.author # access the post's author
end

join() performs an inner join on the provided associations, the query iterates on posts that have an author.


The second example shows two joins on has_many associations.

Author.join(:posts => :comments).each do |author|
  post = author.posts.first # access the post
  comment = post.comments.first # access the comment
end

The query provides one entry per author, per post and per comment, generating lots of objects. To avoid this, use eager_load() described in the next section.