Skip to content

Instantly share code, notes, and snippets.

@ggpasqualino
Last active September 10, 2016 08:13
Show Gist options
  • Save ggpasqualino/42c16d6d8ef2bb193fba69651411da23 to your computer and use it in GitHub Desktop.
Save ggpasqualino/42c16d6d8ef2bb193fba69651411da23 to your computer and use it in GitHub Desktop.
Activerecord relation transaction issue
begin
require "bundler/inline"
rescue LoadError => e
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
raise e
end
gemfile(true) do
source "https://rubygems.org"
# Activate the gem you are reporting the issue against.
gem "activerecord", "4.2.7.1"
gem "sqlite3"
end
require "active_record"
require "minitest/autorun"
require "logger"
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
# 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, force: true do |t|
end
create_table :comments, force: true do |t|
t.integer :post_id
t.string :body
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
post = Post.create!
post.comments << Comment.create!(body: 'lorem ipsum')
post.comments << Comment.create!(body: 'definitely not spam')
comments = post.comments.where("body like '%lorem%'") # having a complex *relation* somewhere
assert_equal 2, Comment.count
assert_equal 2, post.comments.count
comments.transaction do
c = comments.first
assert_equal c.post.id, post.id
# these are failing:
assert_equal 2, Comment.count # query is scoped for the transaction's relation!
assert_equal 2, c.post.comments.count # query is scoped for the transaction's relation!
end
end
end
@ggpasqualino
Copy link
Author

Thanks @vbalazs for the test case

@ggpasqualino
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment