Skip to content

Instantly share code, notes, and snippets.

@wconrad
Last active December 1, 2015 19:06
Show Gist options
  • Save wconrad/9d0b85dbf0b34476ad7f to your computer and use it in GitHub Desktop.
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
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?
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?
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?
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?
$ 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