2016-03-04 56 views
1

我有兩種模式。 OfficeEmployeeEmployee具有office_id作爲foreign_key。這些表是在名稱空間下生成的。那麼,哪個是正確的?我應該在belongs_to中使用has_many中的foreign_key子句嗎?

class MyNamespace::Office < ActiveRecord::Base 
    has_many :employees, foreign_key: 'office_id' 
end 

class MyNamespace::Employee < ActiveRecord::Base 
    belongs_to :office, foreign_key: 'office_id' 
end 

或者

class MyNamespace::Office < ActiveRecord::Base 
    has_many :employees 
end 

class MyNamespace::Employee < ActiveRecord::Base 
    belongs_to :office, foreign_key: 'office_id' 
end 

我覺得第二個例子是正確的,因爲對我來說,不是很有意義聲明foreign_key在has_many關係。一位同事認爲第一個例子是正確的。但我沒有找到太多的這個問題的參考。那麼,有人知道哪個是正確的例子嗎?爲什麼?

回答

3

您可以指定前綴以正確映射到DB中的表名,並根本刪除foreign_keys和MyNamespace。

class Office < ActiveRecord::Base 
    self.table_name_prefix = 'namespace_' 
    has_many :employees 
end 

class Employee < ActiveRecord::Base 
    self.table_name_prefix = 'namespace_' 
    belongs_to :office 
end 
+0

我更新了我的問題。因爲我忘記提到這些表是在名稱空間下生成的,所以在數據庫中,該表的格式爲「my_namespace_employee」和「my_namespace_office」。型號名稱與表名不匹配:/ –

+0

我已更新我的答案 –

相關問題