Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 5 - PG::UndefinedTable: ERROR: relation "application_records" does not exist

I'm trying to set up a new Rails 5 application (ruby 2.3.1, rails 5.0.0.rc1) with postgresql, devise gems and it is failing to run rails db:seed due to following error:

PG::UndefinedTable: ERROR:  relation "application_records" does not exist
LINE 8:                WHERE a.attrelid = '"application_records"'::r...
                                          ^
/Users//.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `async_exec'
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `block in query'
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract_adapter.rb:566:in `block in log'
/Users/foo/.rvm/gems/[email protected]/gems/activesupport-5.0.0.rc1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract_adapter.rb:560:in `log'
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:87:in `query'
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:739:in `column_definitions'
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:227:in `columns' 

After much googling, I've realized that this has something to do with the ApplicationRecord base class change in rails 5. Clearly there's no table called application_records and so active_support shouldn't be looking for it. I have already checked that app/models/application_record.rb exists and has the right content. Also, the User model (which is the only model in my app currently) extends ApplicationRecord as expected:

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, 
         :recoverable, :rememberable, :trackable, :validatable
end

rails db: migrate runs fine, but rails db:seed chokes with the above error.

Can anyone shed some light on what might be causing this?

Contents of application_record.rb:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end
like image 561
paneer_tikka Avatar asked Jul 27 '26 01:07

paneer_tikka


1 Answers

The

PG::UndefinedTable: ERROR:  relation "application_records" does not exist

error also happens if you remove the line:

self.abstract_class = true

from app/models/application_record.rb

That line lets Rails know that this is not a model that should ever be persisted to the database, there's a good summary of Rails' abstract classes here: https://medium.com/@jeremy_96642/deep-rails-how-to-use-abstract-classes-6aee9b686e75

like image 190
agbodike Avatar answered Jul 30 '26 10:07

agbodike