有关此标题的stackoverflow还有另一个问题。这是link。我的问题有点不同,但几乎在同一条线上
我使用的数据库有多个用户,每个用户都拥有一组唯一的数据库权限。因此,我无法在database.yml中硬编码数据库登录详细信息。相反,我想创建一个收集登录凭据的html表单。我知道database.yml可以从这个link以erb方式编写。但是到了那时,我的index.html(我编写了我的表单的页面)显示了,建立连接的尝试已经完成,并且发出错误,提示用户名和密码为nil。请让我知道如何解决这个问题。
我是rails的新手,所以请问我是否提供了足够的信息。提前致谢
答案 0 :(得分:3)
使用ActiveRecord::ConnectionHandling.establish_connection函数调用连接到您的数据库。如果您愿意,您应该能够与每个页面上的其他用户建立连接,或者在用户模型中查找数据库凭据。
如果您这样做,您可以考虑继承ActiveRecord::Base
并重写connection
调用,然后每个模型都会使用它来连接数据库。
如果要在通过应用程序显式设置凭据之前完全避免与数据库的连接,那么您可能希望在不加载所有ActiveRecord特定内容的情况下初始化Rails。在这种情况下,您需要通过在config/environment.rb
块中的Rails::Initializer.run do |config|
中放置此行来从Rails的初始化中删除ActiveRecord:
config.frameworks -= [ :active_record ]
然后,您需要在获得凭据后加载所有ActiveRecord特定的内容。
或者,您可以通过在Rails::Initialize::initialize_database
调用之前将其放在environment.rb中来覆盖Rails::Initializer.run
,这是实际数据库连接的使用位置:
module Rails
class Initializer
def initialize_database
nil
end
end
end
在rails 4.x之前,您将使用ActiveRecord::Base.establish_connection,现已弃用。