将ActiveRecord用于未命名为复数的表

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

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

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

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

  2. 您的表需要将其主键放在名为id的整数列上,并带有auto increment属性。

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

首先,假设您有一些其他数据库系统支持您的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") 

将工作!