【问题标题】:ActiveRecord with remote MySQL in Sinatra在 Sinatra 中使用远程 MySQL 的 ActiveRecord
【发布时间】:2012-06-26 16:17:30
【问题描述】:

我无法为我的特定问题寻找资源,或者至少我不了解我正在寻找的资源。

我需要我的 Sinatra 应用程序能够查询远程 MySQL 数据库并返回一些数据。我对数据库有只读访问权限,所以我需要做的就是检索它。我知道数据库有效,我的连接有效,并且我尝试使用的查询有效。下面是一些示例代码:

db = ActiveRecord::Base.establish_connection(
  adapter:  'mysql', 
  host:     host, 
  database: database,
  username: user,
  password: pass)

然后我尝试用类似的方式查询连接

@courses = db.find_by_sql("SELECT *")

但是db 对象没有find_by_sql 方法,或者实际上没有任何看起来可以完成这项工作的方法。我是否错过了可以查询数据库的步骤或其他内容?

【问题讨论】:

    标签: mysql ruby activerecord sinatra


    【解决方案1】:

    不知道establish_connection的返回值是什么。我怀疑这可能不是你想要的。运行find_by_sql 的正常方式是:

    ActiveRecord::Base.find_by_sql(...)
    

    如果你已经有模型,你也可以这样做:

    MyModel.find_by_sql(...)
    

    另一种方法是直接访问连接适配器对象并在其上调用execute

    ActiveRecord::Base.connection.execute(...)
    

    【讨论】:

    • ActiveRecord 是一个 ORM(谷歌它,一个 ORM 将 DB 数据映射到像 MyModel 这样的对象,它不仅仅是一个哈希它是一个对象映射器)。如果您只想运行 SQL 语句,那么您根本不需要ActiveRecord。只需使用例如以下命令运行正常的 mysql 连接:github.com/brianmario/mysql2。但是,如果您想从远程数据库中查询数据并将它们映射到 MyData 之类的对象中,以便您可以执行 MyData.where(:some_attribute => "something"),那么您可以使用 ActiveRecord 并像使用 Rails 一样创建模型。
    • 这与数据库是否远程无关。它与数据库的位置无关。 ActiveRecord 不在乎你的数据库在哪里,只要它可以连接到它。
    • @thekungfuman 只是需要建立连接。 ActiveRecord 自动为您存储。 blog.aizatto.com/2007/05/21/activerecord-without-rails 。你应该学会使用irb 在控制台中测试你的东西。这样你进步会更快。不幸的是,您所问的问题无法用一个简短的例子来解释。如果您要使用 guides.rubyonrails.org/index.html ,您需要阅读 ActiveRecord 和 rails 。也许你想简单一点,直接使用我上面解释的 mysql gem。
    • @thekungfuman - 请参阅此页面上的示例。这会让你更容易理解并得到一些工作:github.com/brianmario/mysql2
    • 感谢您指路。到目前为止,我唯一的第 3 方服务体验是使用 SOAP 服务,您必须将所有内容存储在哈希中并使用子子子键引用它们!我将研究您推荐的这些文档和 gem。非常感谢。
    猜你喜欢
    • 2013-05-17
    • 2015-06-23
    • 2012-11-09
    • 2011-08-14
    • 1970-01-01
    • 2014-07-10
    • 2013-07-31
    • 2013-07-04
    • 2010-12-12
    相关资源
    最近更新 更多