0

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

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.

在此先感谢。

回答

1

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

如果你不能找到用于SQL Server的工作和你的适配器没有提供它的宝石,你可以随时添加一个原始SQL语句迁移:

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

如果你正在做这很多,你可能想把它包装在你自己的add_foreign_key助手中,最好使用与上述gem use相同的API。

+0

感谢信息sockmonk !是啊读了外国人会尝试与.. .. – Vinoth

1

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

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

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

+0

亚我已经这样做 – Vinoth

+1

你在寻找的东西来设置外键约束然后在数据库?这个答案有一个链接到宝石可能工作:http://stackoverflow.com/questions/4406075/what-c​​reates-the-foreign-key-constraint-in-ruby-on-rails-3 – th3sku11