Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
unless File.exist?('Gemfile')
File.write('Gemfile', <<-GEMFILE)
source 'https://rubygems.org'
gem 'rails', github: 'rails/rails'
gem 'arel', github: 'rails/arel'
gem 'sqlite3'
GEMFILE
system 'bundle'
end
require 'bundler'
Bundler.setup(:default)
require 'active_record'
require 'minitest/autorun'
require 'logger'
# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :posts do |t|
end
create_table :comments do |t|
t.integer :post_id
end
end
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
class BugTest < Minitest::Test
def test_association_stuff
post1 = Post.create!
post2 = Post.create!
post1.comments << Comment.create!
post1.comments << Comment.create!
post2.comments << Comment.create!
post2.comments << Comment.create!
post2.comments << Comment.create!
assert_equal 2, Post.includes(:comments).find(post1.id, post2.id).count
# => SELECT "posts".* FROM "posts" WHERE "posts"."id" IN (1, 2)
# => SELECT "comments".* FROM "comments" WHERE "comments"."post_id" IN (1, 2)
assert_equal 2, Post.joins(:comments).find(post1.id, post2.id).count
# => SELECT "posts".* FROM "posts" INNER JOIN "comments" ON "comments"."post_id" = "posts"."id" WHERE "posts"."id" IN (1, 2)
assert_equal 2, Post.joins(:comments).where(id: [post1.id, post2.id]).count
# => SELECT COUNT(*) FROM "posts" INNER JOIN "comments" ON "comments"."post_id" = "posts"."id" WHERE "posts"."id" IN (1, 2)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.