首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby on Rails模型/数据库关联

Ruby on Rails模型/数据库关联
EN

Stack Overflow用户
提问于 2011-06-03 13:46:51
回答 2查看 185关注 0票数 0

我有一个用户模型,农民模型,医生模型和教育模型。

一个农民有一个用户和许多教育。

医生有一个用户和许多教育背景。

如何设置教育模型的数据库?

它应该有一个farmer_id和一个doctor_id吗?

但是,教育不能同时属于农民和医生.不是一个就是另一个。

因此,我的教育数据库条目将填写farmer_id或doctor_id,但不能同时填写两者。

有没有办法保证一次只能填写一个in?

或者,有没有更好的方法来关联这些模型?

您的帮助将不胜感激!

哦,别担心模型的名字(农夫、医生等)。这只是一个例子。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-03 14:21:20

对于这种情况,我看到了两种可能的解决方案。

第一个是利用多态关联进行教育。它可能看起来像这样:

代码语言:javascript
运行
复制
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。

第二种解决方案是使用单表继承。在您的场景中,这可以通过让Doctor成为用户而不是属于用户来实现。当然,对于一个农民来说也是一样的。它可能看起来像这样:

代码语言:javascript
运行
复制
class User < ActiveRecord::Base
  has_many :educations
end

class Farmer < User
end

class Doctor < User
end

class Education < ActiveRecord::Base
  belongs_to :user
end

在这个场景中,您将向用户模型添加一个类型列来存储它是什么类型的类,然后在教育模型中只有一个user_id

票数 2
EN

Stack Overflow用户

发布于 2011-06-03 14:11:19

我认为这种基于角色的关系是合适的。

代码语言:javascript
运行
复制
Class User
  has_one :role
  has_many :educations
end

Class Role
  #What ever roles you have.
  #Farmer or Doctor
  belongs_to :user
end


class Education
  belongs_to :user
end

这样,您就可以将user_id存储在教育对象中,从而解决您的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6223427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档