0

我正在尝试获取一个基本的 rails 应用程序来从 MS SQL Server 数据库中读取数据。在我正在阅读的教程中(如下所示),它提到表需要遵循某些规则,例如名称是复数形式和下划线等。我的数据库中的表都没有遵循该约定并且可以不能改变。这仍然是真的吗?如果是这样,我需要阅读什么来了解如何与这些表进行通信?

片段 http://coding.smashingmagazine.com/2009/03/27/ultimate-beginners-guide-to-ruby-on-rails/

模型的结构和行为与数据库中的表之间的映射大部分是完全自动化的,前提是您在表的设计中遵守一些规则。一般原则是:

  1. 您的表名是您的类名的复数、带下划线的变体。因此,类 User 将映射到表 users.CookieRecipe 将映射到 cookie_recipes。

  2. 您的表需要在具有自动增量属性的名为 id 的整数列上具有其主键。

  3. 与其他表的关联存储在以它们命名的列中。如果要存储属于用户的帖子,则帖子表需要一个 user_id 列

4

1 回答 1

3

首先,假设您有一些其他数据库系统支持您的 rails 应用程序,您只需要添加对 SQLServer 数据库的只读访问权限。

首先在 app/models/rosql.rb 中创建一个主模型:

def Rosql < ActiveRecord::Base
   establish_connection("ROSQL#{Rails.env}")
end

然后将其添加到您的 database.yml

ROSQLproduction:
  adapter: sqlserver
  mode: dblib
  dataserver: WHATEVER
  username: user
  password: password
  database: WHATEVER
  port: 1433

最后一部分实际上高度依赖于您用于访问 SQL Server 的堆栈。上面是我选择的一个例子,它是 TinyTDS/Freetds。无论如何,现在您可以开始声明 SQL Server 表模型,如下所示:

SqlServerTable < Rosql
  self.table_name = "non_railsy_table_name"
end

您可能想也可能不想尝试定义主键:

SqlServerTable < Rosql
  self.table_name = "non_railsy_table_name"
  self.primary_key "thingKey_PK"
end

所以现在,假设 thingKeyPK 是一个字符串!

@x = SqlServerTable.find("XYZ123")

将工作!

于 2012-07-03T20:58:45.237 回答