Last active
February 24, 2016 04:38
-
-
Save jrafanie/083fff24b2c1532d2545 to your computer and use it in GitHub Desktop.
Uniqueness with an after_create that saves fails on rails master
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 'sprockets', github: 'rails/sprockets' | |
gem 'sprockets-rails', github: 'rails/sprockets-rails' | |
gem 'sass-rails', github: 'rails/sass-rails' | |
gem 'sqlite3' | |
end | |
require 'active_record' | |
require 'logger' | |
# This connection will do for database-independent bug reports. | |
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') | |
ActiveRecord::Schema.define do | |
create_table :topics, force: true do |t| | |
t.string :title | |
t.string :author_name | |
end | |
end | |
class Topic < ActiveRecord::Base | |
validates :title, :uniqueness => true | |
after_create :set_author | |
def set_author | |
update_attributes!(:author_name => "#{title} #{id}") | |
end | |
end | |
Topic.create!(:title => "test") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Fetching git://github.com/rails/rails.git | |
Fetching git://github.com/rails/arel.git | |
Fetching git://github.com/rack/rack.git | |
Fetching git://github.com/rails/sprockets.git | |
Fetching git://github.com/rails/sprockets-rails.git | |
Fetching git://github.com/rails/sass-rails.git | |
Fetching gem metadata from https://rubygems.org/........... | |
Fetching version metadata from https://rubygems.org/... | |
Fetching dependency metadata from https://rubygems.org/.. | |
Resolving dependencies... | |
Using rake 10.5.0 | |
Using concurrent-ruby 1.0.0 | |
Using i18n 0.7.0 | |
Using minitest 5.8.4 | |
Using thread_safe 0.3.5 | |
Using builder 3.2.2 | |
Using erubis 2.7.0 | |
Using mini_portile2 2.0.0 | |
Using json 1.8.3 | |
Using nio4r 1.2.1 | |
Using websocket-extensions 0.1.2 | |
Using mime-types 2.99.1 | |
Using arel 7.0.0 from git://github.com/rails/arel.git (at master@1beac5b) | |
Using bundler 1.11.2 | |
Using method_source 0.8.2 | |
Using thor 0.19.1 | |
Using sass 3.4.21 | |
Using sqlite3 1.3.11 | |
Using tzinfo 1.2.2 | |
Using nokogiri 1.6.7.2 | |
Using rack 2.0.0.alpha from git://github.com/rack/rack.git (at master@ea2ed57) | |
Using websocket-driver 0.6.3 | |
Using mail 2.6.3 | |
Using activesupport 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using loofah 2.0.3 | |
Using rails-html-sanitizer 1.0.3 | |
Using rack-test 0.6.3 | |
Using sprockets 4.0.0.beta2 from git://github.com/rails/sprockets.git (at master@4205b6d) | |
Using rails-deprecated_sanitizer 1.0.3 | |
Using globalid 0.3.6 | |
Using activemodel 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using rails-dom-testing 1.0.7 | |
Using activejob 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using actionview 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using activerecord 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using actionpack 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using actioncable 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using actionmailer 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using railties 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using sprockets-rails 3.0.2 from git://github.com/rails/sprockets-rails.git (at master@907cf04) | |
Using rails 5.0.0.beta2 from git://github.com/rails/rails.git (at master@22db455) | |
Using sass-rails 6.0.0.beta1 from git://github.com/rails/sass-rails.git (at master@2890796) | |
-- create_table(:topics, {:force=>true}) | |
D, [2016-02-23T23:33:58.893552 #21061] DEBUG -- : (0.2ms) CREATE TABLE "topics" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "author_name" varchar) | |
-> 0.0193s | |
D, [2016-02-23T23:33:58.897230 #21061] DEBUG -- : (0.2ms) CREATE TABLE "ar_internal_metadata" ("key" varchar PRIMARY KEY, "value" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) | |
D, [2016-02-23T23:33:58.904126 #21061] DEBUG -- : ActiveRecord::InternalMetadata Load (0.1ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" ORDER BY "ar_internal_metadata"."key" ASC LIMIT ? [["LIMIT", 1]] | |
D, [2016-02-23T23:33:58.909791 #21061] DEBUG -- : (0.0ms) begin transaction | |
D, [2016-02-23T23:33:58.910807 #21061] DEBUG -- : SQL (0.1ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["key", "environment"], ["value", "development"], ["created_at", 2016-02-24 04:33:58 UTC], ["updated_at", 2016-02-24 04:33:58 UTC]] | |
D, [2016-02-23T23:33:58.910958 #21061] DEBUG -- : (0.0ms) commit transaction | |
D, [2016-02-23T23:33:58.914560 #21061] DEBUG -- : (0.1ms) begin transaction | |
D, [2016-02-23T23:33:58.920210 #21061] DEBUG -- : Topic Exists (0.1ms) SELECT 1 AS one FROM "topics" WHERE "topics"."title" = ? LIMIT ? [["title", "test"], ["LIMIT", 1]] | |
D, [2016-02-23T23:33:58.921652 #21061] DEBUG -- : SQL (0.1ms) INSERT INTO "topics" ("title") VALUES (?) [["title", "test"]] | |
D, [2016-02-23T23:33:58.922889 #21061] DEBUG -- : Topic Exists (0.1ms) SELECT 1 AS one FROM "topics" WHERE "topics"."title" = ? AND ("topics"."id" IS NOT NULL) LIMIT ? [["title", "test"], ["LIMIT", 1]] | |
D, [2016-02-23T23:33:58.934851 #21061] DEBUG -- : (0.1ms) rollback transaction | |
/Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/validations.rb:78:in `raise_validation_error': Validation failed: Title has already been taken (ActiveRecord::RecordInvalid) | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/validations.rb:50:in `save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/attribute_methods/dirty.rb:30:in `save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:324:in `block in save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:395:in `block in with_transaction_returning_status' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:228:in `transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:211:in `transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:392:in `with_transaction_returning_status' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:324:in `save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/persistence.rb:279:in `block in update!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:395:in `block in with_transaction_returning_status' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:228:in `transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:211:in `transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:392:in `with_transaction_returning_status' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/persistence.rb:277:in `update!' | |
from recreation_script.rb:38:in `set_author' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:382:in `block in make_lambda' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:207:in `call' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:207:in `block in halting_and_conditional' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:456:in `call' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:456:in `block in call' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:456:in `each' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:456:in `call' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:101:in `__run_callbacks__' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:750:in `_run_create_callbacks' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/callbacks.rb:302:in `_create_record' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/timestamp.rb:68:in `_create_record' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/persistence.rb:534:in `create_or_update' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/callbacks.rb:298:in `block in create_or_update' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:97:in `__run_callbacks__' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activesupport/lib/active_support/callbacks.rb:750:in `_run_save_callbacks' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/callbacks.rb:298:in `create_or_update' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/suppressor.rb:41:in `create_or_update' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/persistence.rb:152:in `save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/validations.rb:50:in `save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/attribute_methods/dirty.rb:30:in `save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:324:in `block in save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:395:in `block in with_transaction_returning_status' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:230:in `block in transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:189:in `within_new_transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:230:in `transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:211:in `transaction' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:392:in `with_transaction_returning_status' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/transactions.rb:324:in `save!' | |
from /Users/joerafaniello/.gem/ruby/2.2.4/bundler/gems/rails-22db455dbe9c/activerecord/lib/active_record/persistence.rb:51:in `create!' | |
from recreation_script.rb:42:in `<main>' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Below is a test you can run within the existing uniqueness_validation_test.rb | |
require "cases/helper" | |
require 'models/topic' | |
class NewTopic < Topic | |
after_create :set_author | |
def set_author | |
update_attributes!(:author_name => "#{title} #{id}") | |
end | |
end | |
class UniquenessValidationTest2 < ActiveRecord::TestCase | |
def test_validate_case_sensitive_uniqueness_with_attribute_passed_as_integer2 | |
NewTopic.validates_uniqueness_of(:title) | |
NewTopic.create!(:title => "Title1") | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment