instance method merge

Ruby on Rails 7.1.6

Since v3.0.20

Available in: v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.9 v5.2.8.1 v6.0.6 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

merge(other, *rest)

Merges in the conditions from other, if other is an ActiveRecord::Relation. Returns an array representing the intersection of the resulting records with other, if other is an array.

Post.where(published: true).joins(:comments).merge( Comment.where(spam: false) )
# Performs a single join query with both where conditions.

recent_posts = Post.order('created_at DESC').first(5)
Post.where(published: true).merge(recent_posts)
# Returns the intersection of all published posts with the 5 most recently created posts.
# (This is just an example. You'd probably want to do this with a single query!)

Procs will be evaluated by merge:

Post.where(published: true).merge(-> { joins(:comments) })
# => Post.where(published: true).joins(:comments)

This is mainly intended for sharing common conditions between multiple associations.

For conditions that exist in both relations, those from other will take precedence. To find the intersection of two relations, use QueryMethods#and.

Parameters

other req
rest rest
Source
# File activerecord/lib/active_record/relation/spawn_methods.rb, line 33
    def merge(other, *rest)
      if other.is_a?(Array)
        records & other
      elsif other
        spawn.merge!(other, *rest)
      else
        raise ArgumentError, "invalid argument: #{other.inspect}."
      end
    end

Defined in activerecord/lib/active_record/relation/spawn_methods.rb line 33 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::SpawnMethods

Type at least 2 characters to search.

↑↓ navigate · open · esc close