我是RoR的新手。我对建立模型之间的关系有一个基本的疑问。让我们举一个简单的Employee和Manager示例。经理管理许多员工,员工属于一个经理。在架构级别,我将在employee表中有一个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命令,但它似乎不会影响数据库中的任何内容。如何在数据库中建立manager和employee表之间的外键 - 主键关系?我正在使用sql-server 2008。
提前致谢。
答案 0 :(得分: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文件夹中找到迁移文件。您可以在创建employees表之前回滚迁移到该点并修改create_table块,也可以创建新的迁移以添加外键。
答案 1 :(得分:1)
这不是直接在rails中提供的,因为实现必须是特定于数据库的。 foreigner gem为mysql,postgres和sql_lite的迁移添加了'add_foreign_key'命令; oracle_enhanced适配器为Oracle提供它。
如果找不到适用于sql server的gem并且你的适配器没有提供它,你总是可以在迁移中添加原始sql语句:
sql = "CREATE FOREIGN KEY ..."
execute(sql)
如果你这么做很多,你可能想把它包装在你自己的add_foreign_key助手中,最好使用与上面gems使用相同的API。