Ruby ActiveRecord可能缺少查询SQLite的方法

时间:2014-05-25 18:09:07

标签: ruby sqlite activerecord

我是新来的,请允许我向您保证,我已经在网上搜索了我在这里寻找解决我非常麻烦的困境的答案。牢记这一点,请允许我解释一下:

我正在运行一个Windows系统(目前确切地说是Windows 8),并且非常希望编写一个简单的程序,允许用户借助GUI在简单的SQLite数据库中保存和修改某些数据。

要做到这一点,我已经安装了Ruby 2.0.0(即使Ruby 1.9.3是针对Visual Ruby建议的,但是当我使用该版本安装Visual Ruby时,它似乎甚至无法远程工作),然后安装了Glade 3.6 .7与GTK +一起使用单击安装程序。正如我所提到的,令我惊讶的是,当我尝试使用较旧的Ruby版本运行它时,Visual Ruby甚至没有启动,尽管有一个小小的警告它仍然可以使用2.0.0。

现在到了你们所有人都会嘲笑我的部分,我当然觉得很傻,但每个人都必须从某个地方开始。在实现一个简单的GUI,并添加一个很好的核心,它将与控制查询到数据库的对象进行通信后,我决定开始使用该数据库连接。现在起初,我想使用MySQL,因为我非常喜欢它,过去我曾经使用它。尽管我安装了大量的Gems和Libraries,但我无法使数据库连接正常工作。所以我转向一个在Visual Ruby本身内呈现的解决方案......一些示例显示了ActiveRecord如何用于访问SQLite数据库。它们不太具体,但在测试它们并看到它们确实有效之后,我决定使用SQLite。

所以我在这里测试ActiveRecord,并且在很长一段时间内取得了我的第一次成功,因为这种挫败感开始了并且它起作用了!我实现了与数据库的连接!然而,成功是短暂的。请允许我向您展示我的代码中的一些代码段,以便您更好地了解我的问题:


要求' ruby​​gems' 要求' active_record' 要求' date'

    ActiveRecord::Base.establish_connection(
            :adapter => "sqlite3",   
                            :database => "db/safebags.db3"
            )

类Safebag<的ActiveRecord :: Base的         self.table_name =" safebagtest"

def puttinRow(safeBagID, shopi, employeeName, date)
#   self.create
    self.safebagid = safeBagID
    self.datesent = date
    self.shop = shop
    self.employeesent = employeeName
    self.validness = 1
    self.save

end

def gettinValid(safeBagID)
#   safebag = self.find_by_safebagid(1)
    return 1
end


我知道你在这里看不到对象的创建,但我向你保证我会在我的代码中创建它们。我只是试图在我的酸性代码设计中保留一种Hiarchy。现在我遇到的问题是我用#34;#"标记的两条线。如果我将它们保存在我的代码中,程序一旦被访问就会崩溃。请允许我向您展示一个这样的例子:


C:/Ruby200/lib/ruby/gems/2.0.0/gems/activemodel-4.1.1/lib/active_model/attribute_methods.rb:435:in `method_missing': undefined method `create' for #<Safebag:0x667cdd0>
     from C:/Ruby200/lib/ruby/gems/2.0.0/gems/activerecord-4.1.1/lib/active_record/attribute_methods.rb:206:in `method_missing'
     from C:/Users/Nightshade/visualruby/examples/safebags/bin/SafeBagCore.rb:168:in `puttinRow'
     from C:/Users/Nightshade/visualruby/examples/safebags/bin/SafeBagCore.rb:114:in `addSafebag'
     from C:/Users/Nightshade/visualruby/examples/safebags/bin/SafeBagCore.rb:49:in `sendSafeBag'
     from C:/Users/Nightshade/visualruby/examples/safebags/bin/MyClass.rb:19:in `eintragenButton__clicked'
     from C:/Ruby200/lib/ruby/gems/2.0.0/gems/vrlib-1.0.16/lib/GladeGUI.rb:173:in `call'
     from C:/Ruby200/lib/ruby/gems/2.0.0/gems/vrlib-1.0.16/lib/GladeGUI.rb:173:in `block (3 levels) in parse_signals'
     from C:/Ruby200/lib/ruby/gems/2.0.0/gems/vrlib-1.0.16/lib/GladeGUI.rb:394:in `call'
     from C:/Ruby200/lib/ruby/gems/2.0.0/gems/vrlib-1.0.16/lib/GladeGUI.rb:394:in `main'
     from C:/Ruby200/lib/ruby/gems/2.0.0/gems/vrlib-1.0.16/lib/GladeGUI.rb:394:in `show_window'
     from C:/Ruby200/lib/ruby/gems/2.0.0/gems/vrlib-1.0.16/lib/GladeGUI.rb:382:in `show'
     from main.rb:15:in `<main>'

你看到了我的问题。我在这个网站的某处读到,有可能Ruby 2.0.0并没有完全被SQLite删除,而且应该降级到1.9.3 ....但是,请记住我提到的问题,这个旧版本不起作用完全用Visual Ruby。

经过一周多的时间安装各种Gems,包括MySQL,MySQL2(甚至没有安装),DBI,以及其他一些绝对谵妄的东西,我显然已经知道了。我必须监督一些事情。如果你们能帮助我,我将非常感激。

请注意,如果我将两个问题都排除在外,我可以在数据库中添加一行...但是,如果我迭代并尝试添加第二行,它根本不做任何事情 - .-

ActiveRecord应该能够使用的任何其他方法也以相同的结果结束,包括:find,where。

请尽可能帮助我。我只是拒绝相信Ruby无法连接和查询数据库,我相信你们中的一些人可以向我证明它确实如此:)

-RubyJason

1 个答案:

答案 0 :(得分:0)

如果您现在只进行开发,则可以使用database.yml文件。如果您要部署应用程序,它可能会在以后有用。我正在使用SQLite3,我想如果我们都追求更好地使用ActiveRecord,我们可以欣赏SQLite3 它是什么。我仍在处理与您有所不同的事情,并且能够像您一样创建数据库,但在我弄清楚如何使用schema.rb和迁移之后,我的连接可能需要工作。我还不关心任何型号。我可以使用SQLite浏览器,它是我在Kali Linux上的数据库的GUI。我认为你也可以在Windows上获得它,但我并不积极。也许只是获取它的来源,如果你可以,因为它可能有线索让你的应用程序工作。只是一个想法。是的!刚刚在这里找到它。 http://sqlitebrowser.org/ 祝你好运!