我看到了两种可能的解决方案。
第一个是利用多态关联进行教育。这可能是这样的:
class Farmer < ActiveRecord::Base
belongs_to :user
has_many :educations, :as => :profession
end
class Doctor < ActiveRecord::Base
belongs_to :user
has_many :educations, :as => :profession
end
class Education < ActiveRecord::Base
belongs_to :profession, :polymorphic => true
end
因此,而不是教育有doctor_id或farmer_id它有一个profession_id和一个profession_type。
第二个解决方案是使用单表继承。在您的情景中,可以通过让医生成为用户而不是属于用户来实现。当然对于农民来说也是一样的。这可能是这样的:
class User < ActiveRecord::Base
has_many :educations
end
class Farmer < User
end
class Doctor < User
end
class Education < ActiveRecord::Base
belongs_to :user
end
而且在这种情况下,你将一个类型列添加到用户模型来存储它是什么类型的类,然后只为在教育模式
每当我在rails中使用STI时,我都非常后悔。我不知道这只是我是愚蠢的还是只是糟透了。我会选择多态关系解决方案。 – 2011-06-03 10:48:16
Polymorphic可能也是我的选择。 – DanneManne 2011-06-03 11:05:47
所以专业模型有一个profession_id和profession_type?两者都是数据库中的整数字段?我可以通过专业模型中的枚举来表示profession_type? – sizzle 2011-06-07 19:51:39