2013-05-02 31 views
0

我正在创建一个应用程序,用户登录到Oracle数据库并运行准备好的查询。我想使用ActiveRecord来帮助运行查询,但我遇到了一些问题。在Rails应用程序中无法解救错误

当用户试图登录,我的测试运行

def test (username, password) 
ActiveRecord::Base.establish_connection({ 
    :adapter => 'oracle_enhanced', 
    :database => '//database:1521/test', 
    :username => username, 
    :password => password 
}) 
end 

然而,连接如果用户输入不正确的登录信息,我得到以下错误:

OCIError 

ORA-01017: invalid username/password; logon denied 

在铁轨上页。当我尝试重新加载登录页面时,它一直显示该错误并且不显示实际的登录页面。消除此错误的唯一方法是重新启动整个导轨应用程序。

这是因为我试图建立连接到不同的数据库,但它失败了,它不知道该怎么办?有什么办法可以防止这种情况发生?

+0

见对此事进行类似的帖子:http://stackoverflow.com/questions/1226182/how-do -i-work-with-two-different-databases-in-rails-with-active-records – lebreeze 2013-05-02 06:40:42

+0

我无法将数据库信息添加到'database.yml'中,因为用户必须使用他/她自己的凭证登录,而且我可以在此之前,不建立与数据库的连接。 – josh 2013-05-02 06:43:21

回答

2

我以前也遇到过这个问题。为了测试数据库连接,你不应该使用ActiveRecord :: Base,因为它会影响整个应用程序,但是你应该创建一个抽象类。下面是代码:

class DbConnectionTest < ActiveRecord::Base 
    @abstract_class = true 
end 

然后你只需简单地使用自定义类:

DbConnectionTest.establish_connection({}) 
+0

工作正常!我必须运行'DbConnectionTest.establish_connection({}).checkout'来测试,但它工作!我还有一个问题:为什么它必须是抽象的? – josh 2013-05-02 07:12:35

+0

抽象活动记录类意味着它不映射到任何表。如果您未设置此属性,则尝试使用该类时会引发错误。或者您必须创建表格并将其映射到该类。 – 2013-05-02 07:21:10

相关问题