Skip to content

Instantly share code, notes, and snippets.

@claptimes5
Created February 7, 2017 14:31
Show Gist options
  • Save claptimes5/c815bf0a55858269ce1266e2db15861c to your computer and use it in GitHub Desktop.
Save claptimes5/c815bf0a55858269ce1266e2db15861c to your computer and use it in GitHub Desktop.
Demonstration of issue https://github.com/rails/rails/issues/22723 with rails 5.0.1
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", "5.0.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 :employees, force: true do |t|
t.string :first_name
t.string :last_name
t.boolean :enabled
end
create_table :employee_roles, force: true do |t|
t.integer :employee_id
t.integer :role_id
t.boolean :enabled
end
create_table :roles, force: true do |t|
t.string :name
t.boolean :enabled
end
create_table :related_employees, force: true do |t|
t.boolean :enabled
t.integer :employee_id
t.integer :related_employee_id
end
end
class Employee < ActiveRecord::Base
default_scope { where(enabled: true) }
has_many :roles, through: :employee_roles
has_many :employee_roles
has_many :related_employees,
primary_key: :id,
foreign_key: :employee_id
has_many :subordinates,
through: :related_employees,
source: :employee
end
class RelatedEmployee < ActiveRecord::Base
default_scope { where(enabled: true) }
belongs_to :employee,
primary_key: :id,
foreign_key: :related_employee_id
end
class Role < ActiveRecord::Base
default_scope { where(enabled: true) }
has_many :employees, through: :employee_roles
has_many :employee_roles
has_many :subordinates, through: :employees
end
class EmployeeRole < ActiveRecord::Base
default_scope { where(enabled: true) }
belongs_to :employee
belongs_to :role
end
class BugTest < Minitest::Test
def test_association_stuff
employee = Employee.create!(first_name: 'Peter', last_name: 'Parker', enabled: true)
employee_2 = Employee.create!(first_name: 'John', last_name: 'Parker', enabled: true)
role = Role.create!(name: 'Admin Role', enabled: true)
EmployeeRole.create!(employee_id: Employee.first.id, role_id: Role.first.id, enabled: true)
RelatedEmployee.create!(employee_id: Employee.first.id, related_employee_id: Employee.last.id, enabled: true)
assert_equal Role.first.subordinates.first.id, employee_2.id
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment