Skip to content

Instantly share code, notes, and snippets.

@enknamel
Created August 27, 2015 01:14
Show Gist options
  • Save enknamel/8b0c57095d1be86f2607 to your computer and use it in GitHub Desktop.
Save enknamel/8b0c57095d1be86f2607 to your computer and use it in GitHub Desktop.
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'
gem 'rails', github: 'rails/rails'
gem 'arel', github: 'rails/arel'
gem 'rack', github: 'rack/rack'
gem 'sqlite3'
end
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 :users, force: true do |t|
#this is my referral code that i can hand out to people
t.integer :referral_code, null: false
#this is who referred me. i can only be referred by 1 person
t.integer :referred_by_id, null: true
#this is how many people i have referred
t.integer :referral_count, null: false, default: 0
end
end
class User < ActiveRecord::Base
belongs_to :referred_by, class_name: 'User', foreign_key: :referred_by_id, counter_cache: :referral_count, primary_key: :referral_code
end
class BugTest < Minitest::Test
def test_counter_cache
u1 = User.create!(referral_code: 3)
u2 = User.create!(referral_code: 2)
u3 = User.create!(referral_code: 1)
u1.referred_by = u2
u2.referred_by = u3
u3.referred_by = u1
u1.save!
u2.save!
u3.save!
u1.reload
u2.reload
u3.reload
assert_equal 1, u1.referral_count
assert_equal 1, u2.referral_count
assert_equal 1, u3.referral_count
end
end
@amalagaura
Copy link

This is a bit confusing because you have 1,2,3 as referral codes which will also be id's. Easier to use some weird unique referral codes which will not overlap with ids.

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