我应该在has_many中使用foreign_key子句,如在belongs_to中吗?

时间:2016-03-04 18:45:19

标签: ruby-on-rails database ruby-on-rails-4 activerecord

我有两个型号。 OfficeEmployeeEmployeeoffice_id作为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

我认为第二个例子是正确的,因为对我而言,没有意义声明has_many关系中的foreign_key。同事认为第一个例子是正确的。但我没有找到太多关于这个主题的参考资料。那么,有人知道哪个是正确的例子,为什么?

1 个答案:

答案 0 :(得分: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