Rails 使用多个数据库 - 没有将 nil 隐式转换为 String
Rails using multiple databases - no implicit conversion of nil into String
我正在尝试建立与另一个数据库的连接
class Something < ApplicationRecord
self.abstract_class = true
establish_connection {adapter:"postgresql",host:"localhost",port:5432,database:"dev_x",user:"user",password:"1234"}
end
但每当我尝试 运行 一个方法(例如:Something.all)时,我都会收到错误消息:
no implicit conversion of nil into String
知道为什么吗?
你的问题是 Something
是一个抽象 class:
class Something < ApplicationRecord
self.abstract_class = true # <-------------------------
Abstract classes 并不意味着直接实例化,你应该对它们进行 subclass 并实例化 subclasses。 abstract_class
属性 或多或少是一种无需调用 STI(单一 Table 继承)即可子class 模型的方法。
要么使用 Something
作为第二个数据库中模型的基础 class,要么删除 self.abstract_class = true
使其成为 "real" 模型 class。
至于你的 no implicit conversion of nil into String
错误来自哪里,请记住抽象模型 classes 没有 table 名称并且无法实例化,来自 the documentation:
class Shape < ActiveRecord::Base
self.abstract_class = true
end
Polygon = Class.new(Shape)
Square = Class.new(Polygon)
Shape.table_name # => nil
Polygon.table_name # => "polygons"
Square.table_name # => "polygons"
Shape.create! # => NotImplementedError: Shape is an abstract class and cannot be instantiated.
值得一提的是为什么我没有正确使用代码。我们还使用 Octopus gem(gem for 运行 多数据库)。当八达通打开时,本机 establish_connection
方法似乎不起作用:(.
对于你们所有人 - 使用 octopus_establish_connection
但要注意:https://github.com/thiagopradi/octopus/issues/101
我正在尝试建立与另一个数据库的连接
class Something < ApplicationRecord
self.abstract_class = true
establish_connection {adapter:"postgresql",host:"localhost",port:5432,database:"dev_x",user:"user",password:"1234"}
end
但每当我尝试 运行 一个方法(例如:Something.all)时,我都会收到错误消息:
no implicit conversion of nil into String
知道为什么吗?
你的问题是 Something
是一个抽象 class:
class Something < ApplicationRecord
self.abstract_class = true # <-------------------------
Abstract classes 并不意味着直接实例化,你应该对它们进行 subclass 并实例化 subclasses。 abstract_class
属性 或多或少是一种无需调用 STI(单一 Table 继承)即可子class 模型的方法。
要么使用 Something
作为第二个数据库中模型的基础 class,要么删除 self.abstract_class = true
使其成为 "real" 模型 class。
至于你的 no implicit conversion of nil into String
错误来自哪里,请记住抽象模型 classes 没有 table 名称并且无法实例化,来自 the documentation:
class Shape < ActiveRecord::Base
self.abstract_class = true
end
Polygon = Class.new(Shape)
Square = Class.new(Polygon)
Shape.table_name # => nil
Polygon.table_name # => "polygons"
Square.table_name # => "polygons"
Shape.create! # => NotImplementedError: Shape is an abstract class and cannot be instantiated.
值得一提的是为什么我没有正确使用代码。我们还使用 Octopus gem(gem for 运行 多数据库)。当八达通打开时,本机 establish_connection
方法似乎不起作用:(.
对于你们所有人 - 使用 octopus_establish_connection
但要注意:https://github.com/thiagopradi/octopus/issues/101