0

我是 RoR 的新手。我对建立模型之间的关系有一个基本的疑问。让我们举一个员工和经理的简单例子。经理管理许多员工,一名员工属于一位经理。在模式级别,我将在员工表中有一个 managerid 外键。

class Employee < ActiveRecord::Base
  attr_accessible :employee_id, :employee_name, :manager_id
  belongs_to :manager
end

class Manager < ActiveRecord::Base
  attr_accessible :manager_id, :manager_name
  has_many :employeees
end

一旦我在模型中指定了这样的关系,我如何确保在数据库中维护这样的数据完整性?我运行了 rake db:migrate 命令,但它似乎不会影响数据库中的任何内容。我应该怎么做才能在数据库中的经理和员工表之间建立外键 - 主键关系?我正在使用 sql-server 2008。

提前致谢。

4

2 回答 2

1

您是否编辑了生成模型时创建的迁移文件?在员工迁移中,您需要像这样指定外键:

class CreateEmployees < ActiveRecord::Migration
  def change
    create_table :employees do |t|
      t.string :manager_name
      t.integer :manager_id
    end
  end
end

您可以在 db/migrations 文件夹中找到迁移文件。您可以将迁移回滚到创建员工表之前的点并修改 create_table 块,或者您可以创建新迁移以添加外键。

于 2013-06-18T12:55:48.613 回答
1

这不是直接在 rails 中提供的,因为实现必须是特定于数据库的。foreigner gem 为迁移添加了一个“ add_foreign_key”命令,适用于 mysql、postgres 和 sql_lite;oracle_enhanced 适配器为 Oracle 提供它。

如果您找不到适用于 sql server 的 gem,并且您的适配器没有提供它,您可以随时将原始 sql 语句添加到迁移中:

sql = "CREATE FOREIGN KEY ..."
execute(sql)

如果您经常这样做,您可能希望将其包装在您自己的 add_foreign_key 帮助器中,最好使用与上述 gem 使用的 API 相同的 API。

于 2013-06-18T13:34:43.233 回答