没有将 nil 隐式转换为 String。 dbview_cti
No implicit conversion of nil into String. dbview_cti
我使用dbview_ctigem进行ClassTable继承(CTI)。我有两个 classes Person(abstract class) 和 Client(inherits Person).
问题:
当我尝试 make rake db:migrate
时,控制台写入此错误:
StandardError: An error has occurred, this and all later migrations canceled:
no implicit conversion of nil into String ../postgresql/utils.rb:24:in `quote_ident'
模范人物
class Person < ActiveRecord::Base
self.abstract_class = true
cti_base_class
end
模范客户
class Client < Person
cti_derived_class
end
迁移create_people
class CreatePeople < ActiveRecord::Migration
def self.up
create_table :persons do |t|
t.string :pesel, null: false
t.string :first_name, null: false
t.string :last_name, null: false
t.string :email, null: false
t.date :data_of_birth, null: false
t.string :password_digest, null: false
t.timestamps null: false
end
end
def self.down
drop_table :persons
end
end
迁移create_clients
class CreateClients < ActiveRecord::Migration
def change
create_table :clients do |t|
t.references :person
t.timestamps null: false
end
cti_create_view('Client')
end
end
有关错误的更多详细信息:
> == 20160223135814 CreateClients: migrating ====================================
> -- create_table(:clients)
> -> 0.0348s
> -- cti_create_view("Client")
> rake aborted!
> StandardError: An error has occurred, this and all later migrations canceled:
>
> no implicit conversion of nil into String/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/utils.rb:24:in
> `quote_ident'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/utils.rb:24:in
> `quoted'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:31:in
> `quote_table_name'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:738:in `column_definitions'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:186:in
> `columns'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/schema_cache.rb:43:in
> `columns'
知道哪里错了吗?
您的 Person
class 被标记为摘要 class,因此它的 table_name
是 nil
。一般来说 abstract_class 已被添加,因此 gems 可以定义它们自己的 ActiveRecord::Base 的子 class ,然后可以在应用程序中继承它们而不会导致 STI 逻辑进入。你可以使它非抽象或后退 table 继承名称:
class Person < ActiveRecord::Base
self.abstract_class = true
self.table_name = 'people'
cti_base_class
end
我使用dbview_ctigem进行ClassTable继承(CTI)。我有两个 classes Person(abstract class) 和 Client(inherits Person).
问题:
当我尝试 make rake db:migrate
时,控制台写入此错误:
StandardError: An error has occurred, this and all later migrations canceled:
no implicit conversion of nil into String ../postgresql/utils.rb:24:in `quote_ident'
模范人物
class Person < ActiveRecord::Base
self.abstract_class = true
cti_base_class
end
模范客户
class Client < Person
cti_derived_class
end
迁移create_people
class CreatePeople < ActiveRecord::Migration
def self.up
create_table :persons do |t|
t.string :pesel, null: false
t.string :first_name, null: false
t.string :last_name, null: false
t.string :email, null: false
t.date :data_of_birth, null: false
t.string :password_digest, null: false
t.timestamps null: false
end
end
def self.down
drop_table :persons
end
end
迁移create_clients
class CreateClients < ActiveRecord::Migration
def change
create_table :clients do |t|
t.references :person
t.timestamps null: false
end
cti_create_view('Client')
end
end
有关错误的更多详细信息:
> == 20160223135814 CreateClients: migrating ====================================
> -- create_table(:clients)
> -> 0.0348s
> -- cti_create_view("Client")
> rake aborted!
> StandardError: An error has occurred, this and all later migrations canceled:
>
> no implicit conversion of nil into String/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/utils.rb:24:in
> `quote_ident'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/utils.rb:24:in
> `quoted'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:31:in
> `quote_table_name'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:738:in `column_definitions'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:186:in
> `columns'
> /home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/schema_cache.rb:43:in
> `columns'
知道哪里错了吗?
您的 Person
class 被标记为摘要 class,因此它的 table_name
是 nil
。一般来说 abstract_class 已被添加,因此 gems 可以定义它们自己的 ActiveRecord::Base 的子 class ,然后可以在应用程序中继承它们而不会导致 STI 逻辑进入。你可以使它非抽象或后退 table 继承名称:
class Person < ActiveRecord::Base
self.abstract_class = true
self.table_name = 'people'
cti_base_class
end