Last active
December 1, 2015 19:06
-
-
Save wconrad/9d0b85dbf0b34476ad7f to your computer and use it in GitHub Desktop.
Reproduce "ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord" exception
This file contains hidden or 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
gem "activerecord", "4.2.5" | |
# Given that I am using the sqlserver adapter | |
gem "activerecord-sqlserver-adapter", "~> 4.2.5" | |
require "active_record" | |
# And the model is defined before establishing a connection | |
class DataStagePropertyAttributes < ActiveRecord::Base | |
self.table_name = "foo" | |
end | |
config = { | |
"adapter" => "sqlserver", | |
"host" => "192.168.0.205", | |
"port" => 1433, | |
"username" => "squiggle", | |
"password" => "squiggle", | |
"database" => "squiggle_test", | |
} | |
ActiveRecord::Base.establish_connection(config) | |
# And the model has no ID | |
ActiveRecord::Schema.define do | |
create_table "foo", :force => true, id: false do |t| | |
t.text "property_id" | |
end | |
end | |
# Then this query raises: ActiveRecord::Base doesn't belong in a | |
# hierarchy descending from ActiveRecord | |
# (ActiveRecord::ActiveRecordError) | |
DataStagePropertyAttributes.where(property_id: 'ABC').exists? |
This file contains hidden or 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
gem "activerecord", "4.2.5" | |
gem "activerecord-sqlserver-adapter", "~> 4.2.5" | |
require "active_record" | |
config = { | |
"adapter" => "sqlserver", | |
"host" => "192.168.0.205", | |
"port" => 1433, | |
"username" => "squiggle", | |
"password" => "squiggle", | |
"database" => "squiggle_test", | |
} | |
ActiveRecord::Base.establish_connection(config) | |
# When model is defined after connection is established | |
class DataStagePropertyAttributes < ActiveRecord::Base | |
self.table_name = "foo" | |
end | |
ActiveRecord::Schema.define do | |
create_table "foo", :force => true, id: false do |t| | |
t.text "property_id" | |
end | |
end | |
# Then the query causes no exception | |
DataStagePropertyAttributes.where(property_id: 'ABC').exists? |
This file contains hidden or 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
gem "activerecord", "4.2.5" | |
# Given that I am using the sqlserver adapter | |
gem "activerecord-sqlserver-adapter", "~> 4.2.5" | |
require "active_record" | |
# And the model is defined before establishing a connection | |
class DataStagePropertyAttributes < ActiveRecord::Base | |
self.table_name = "foo" | |
end | |
config = { | |
"adapter" => "sqlserver", | |
"host" => "192.168.0.205", | |
"port" => 1433, | |
"username" => "squiggle", | |
"password" => "squiggle", | |
"database" => "squiggle_test", | |
} | |
ActiveRecord::Base.establish_connection(config) | |
# And the model has an ID | |
ActiveRecord::Schema.define do | |
create_table "foo", :force => true do |t| | |
t.text "property_id" | |
end | |
end | |
# Then this query causes no exception | |
DataStagePropertyAttributes.where(property_id: 'ABC').exists? |
This file contains hidden or 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
gem "activerecord", "4.2.5" | |
# Given that I am using the sqlite3 adapter | |
gem "sqlite3", "1.3.11" | |
require "active_record" | |
# And the model is defined before establish a connection | |
class DataStagePropertyAttributes < ActiveRecord::Base | |
self.table_name = "foo" | |
end | |
config = { | |
"adapter" => "sqlite3", | |
"database" => ":memory:", | |
} | |
ActiveRecord::Base.establish_connection(config) | |
# And the model has no ID | |
ActiveRecord::Schema.define do | |
create_table "foo", :force => true, id: false do |t| | |
t.text "property_id" | |
end | |
end | |
# Then the query causes no exception | |
DataStagePropertyAttributes.where(property_id: 'ABC').exists? |
This file contains hidden or 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
$ ruby -v | |
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] | |
$ ruby fails.rb | |
-- create_table("foo", {:force=>true, :id=>false}) | |
-> 0.0432s | |
-> -1 rows | |
/home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/inheritance.rb:102:in `base_class': ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord (ActiveRecord::ActiveRecordError) | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/attribute_methods/primary_key.rb:84:in `reset_primary_key' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/attribute_methods/primary_key.rb:73:in `primary_key' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-sqlserver-adapter-4.2.6/lib/arel/visitors/sqlserver.rb:178:in `primary_Key_From_Table' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-sqlserver-adapter-4.2.6/lib/arel/visitors/sqlserver.rb:145:in `make_Fetch_Possible_And_Deterministic' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-sqlserver-adapter-4.2.6/lib/arel/visitors/sqlserver.rb:107:in `visit_Orders_And_Let_Fetch_Happen' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-sqlserver-adapter-4.2.6/lib/arel/visitors/sqlserver.rb:69:in `visit_Arel_Nodes_SelectStatement' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/arel-6.0.3/lib/arel/visitors/reduce.rb:13:in `visit' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/arel-6.0.3/lib/arel/visitors/reduce.rb:7:in `accept' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:12:in `to_sql' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:32:in `select_all' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/query_cache.rb:70:in `select_all' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:38:in `select_one' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:43:in `select_value' | |
from /home/wayne/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.5/lib/active_record/relation/finder_methods.rb:302:in `exists?' | |
from fails.rb:33:in `<main>' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment