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