pan*_*kka 6 postgresql devise ruby-on-rails-5
我正在尝试使用postgresql 设置新的 Rails 5应用程序(红宝石2.3.1,rails 5.0.0.rc1),设计gems,rails db:seed由于以下错误,它无法运行:
PG::UndefinedTable: ERROR: relation "application_records" does not exist
LINE 8: WHERE a.attrelid = '"application_records"'::r...
^
/Users//.rvm/gems/ruby-2.3.1@rails5.0/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `async_exec'
/Users/foo/.rvm/gems/ruby-2.3.1@rails5.0/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `block in query'
/Users/foo/.rvm/gems/ruby-2.3.1@rails5.0/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract_adapter.rb:566:in `block in log'
/Users/foo/.rvm/gems/ruby-2.3.1@rails5.0/gems/activesupport-5.0.0.rc1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/foo/.rvm/gems/ruby-2.3.1@rails5.0/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract_adapter.rb:560:in `log'
/Users/foo/.rvm/gems/ruby-2.3.1@rails5.0/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:87:in `query'
/Users/foo/.rvm/gems/ruby-2.3.1@rails5.0/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:739:in `column_definitions'
/Users/foo/.rvm/gems/ruby-2.3.1@rails5.0/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:227:in `columns'
Run Code Online (Sandbox Code Playgroud)
经过大量的搜索之后,我意识到这与Rails 5中ApplicationRecord基类的更改有关。显然没有调用任何表application_records,因此active_support不应查找该表。我已经检查过该app/models/application_record.rb内容并具有正确的内容。此外,用户模型(这是当前我的应用程序中唯一的模型)按预期扩展了ApplicationRecord:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
end
Run Code Online (Sandbox Code Playgroud)
rails db: migrate运行正常,但因rails db:seed上述错误而窒息。
谁能弄清楚是什么原因造成的?
内容application_record.rb:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
Run Code Online (Sandbox Code Playgroud)
这
PG::UndefinedTable: ERROR: relation "application_records" does not exist
Run Code Online (Sandbox Code Playgroud)
如果删除该行也会发生错误:
self.abstract_class = true
Run Code Online (Sandbox Code Playgroud)
从app/models/application_record.rb
该行让 Rails 知道这不是一个应该持久保存到数据库的模型,这里有一个关于 Rails 抽象类的很好的总结: https: //medium.com/@jeremy_96642/deep-rails-how-to-使用抽象类-6aee9b686e75
回答我自己的问题,因此可能会帮助其他遇到类似问题的人。
正如 @PrathameshSonpatki 在Rails 问题上提到的,发生这种情况是因为userstamp gem注入关系ActiveRecord::Base而不是ApplicationRecord. (请注意,在撰写本文时,userstamp gem 与 Rails 5 不兼容)。
如果您有一个 gem 尚未使用 Rails 5 进行测试,并且您遇到了 active_support 寻找名为 的表的问题application_records,请检查您正在使用的 gem 之一是否注入了类上的关系ActiveRecord::Base。根据这篇博文,其目的ApplicationRecord就是避免全局注入ActiveRecord::Base。因此,您需要寻找与 Rails 5 兼容的此类 gem 的版本,或修补此类 gem 以将必要的行为注入ApplicaitonRecord而不是ActiveRecord::Base.
| 归档时间: |
|
| 查看次数: |
1061 次 |
| 最近记录: |