2009-06-02 166 views
0

例如说我有一个SQL模式,它已经准备就绪。我如何将它导入到我的Rails应用程序中,以便使用我准备好的数据库而不是所有那些有趣的迁移。如何导入SQL架构Rails的

编辑:你们都误解了我的问题至今。我在问PostgresQL是否有工作的数据库应用程序。我如何将这作为我的Rails应用程序的基础?

+0

我的回应和麦克伍德豪斯仍然站立。 – 2009-06-02 10:44:43

回答

0

提供数据库表按照Rails的ActiveRecord naming conventions那么你应该去的好。运行SQL以创建数据库对象。然后,您可以以常规方式生成Rails模型,但跳过创建迁移文件。

例如:

script/generate --skip-migration User name:string, age:integer 
1

我将转储当前数据库到轨架构,然后用它来生成迁移文件。通过这种方式,您可以更好地控制数据库,并采用导轨方式。 对于这一点,你应该:

  1. 设置你的数据库配置文件(配置/ database.yml中)
  2. 运行rake db:schema:dump这将创建模式文件db/schema.rb
  3. 使用创建迁移文件/文件

    - 你schema.rb

内容

#db/migrate/001_create_database.rb 
class CreateDatabase < ActiveRecord::Migration 
    def self.up 
    # the content of schema.rb 
    end 

    def self.down 
    # drop all the tables 
    end 
end 

这样你以后可以采取迁移的优势,开发应用程序时。

1

这应该这样做

def self.up 
    execute <<EOF 
begin; 
    SQL HERE 
commit; 
EOF 
    end 
+0

另外需要注意的是,当你执行rake db时:迁移时,所有这些都会在迁移过程中运行一些SQL:任何模型都需要手动设置。 – 2009-06-02 10:58:35

2

有您使用迁移没有要求,“搞笑”或其他。从表格开始创建模型。 Rails作者非常聪明,认识到需要支持“传统模式”。

需要注意的是,如果你的主键不叫id,那么你就需要定义主键(见P316“敏捷Web开发使用Rails第3版”):

class LegacyBook < ActiveRecord::Base 
    self.primary_key = "isbn" 
end 

同样,如果您外键名称不遵循AR常规默认样式,您需要在关系定义中明确定义它们。

开箱,ActiveRecord的不支持复合主键:不过它那种假设的东西更像是第五范式(PK只是一种任意数量的与业务域没有意义)。至少有一个gem,适当命名为composite_primary_keys(以通常方式安装gem),但它可能不支持AR 2.3(我在参考gem list --remote composite时看到v2.2.2)。关于Google Groups有一些讨论。

0

编辑你的config /数据库。像这样的yml文件:

development: 
    database: [your legacy database name] 
    host: localhost 
    adapter: postgres 

您可能必须包含用户名和密码键,我通常不会为postgres。你也想在postgres中设置一个测试数据库。

一旦你已经配置在这样的开发数据库,​​你将能够:

> rake db:schema:dump 

,并使用

> rake db:schema:load RAILS_ENV=test 

与生成的文件创建测试数据库。