我们的Rails建模思路有什么问题?

时间:2013-05-05 22:57:17

标签: ruby-on-rails-3.2 associations single-table-inheritance

如果用户 - >学生//员工(单表继承),他们都属于组织 - >学校//工作(单表继承),编写关联的正确方法是什么?我将organization_id放入User类,并在各自的子类中编写了属于/有多个,但是当我调用User.school时,即使他有一个organization_id = 1,我也会得到" nil"。

user.rb

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :organization_id, :type
end

student.rb

class Student < User
  belongs_to :school
end

employee.rb

class Employee < User
  belongs_to :company
end

organization.rb

class Organization < ActiveRecord::Base
  attr_accessible :name
end

school.rb

class School < Organization
  has_many :students
end

company.rb

class Company < Organization
  has_many :employees
end

2 个答案:

答案 0 :(得分:0)

我强烈建议您不要使用单表继承。你从中获得了什么好处?学生和员工是不同的东西,学校和公司也是如此。它们应该是单独的表格。从长远来看,它会让你的生活如此简单。如果你不使用单表继承,这个问题也会消失。

答案 1 :(得分:0)

User类没有定义学校关联,并且完全不了解Student类。所以你不能指望User.school工作。您可以期待Student.school工作,因为这是您的代码所定义的。

STI的作用形成了列的视角,它只是添加了一个类型字符串列,显示了记录映射到哪个模型的子类型。

您也可以重新考虑如何为数据建模。学生属于学校,但用户也可能属于公司或两所学校。