【发布时间】:2014-07-27 02:46:15
【问题描述】:
我有三张桌子:
Topics Jobs Requests
----- ---- --------
title description request
description worker_id user_id
topic_id worker_id
topic_id
工人为每个主题创建一个工作。然后,用户可以请求工作人员完成这项工作。
我目前的联想:
class Topic < AR::Base
has_many :jobs
has_many :worker, through: :jobs
end
class Job < AR::Base
belongs_to :topic
belongs_to :worker
has_many :requests
end
class Request < AR::Base
belongs_to :user
belongs_to :worker
belongs_to :topic
has_one: :job, through: :topic #This doesn't work, lol.
end
问题:
我不确定请求应该属于主题还是作业。
我需要:
访问请求的主题信息比访问作业信息更频繁,但仍然有可用的作业信息。
根据主题和工作人员创建请求,而不是作业。 (这很重要。)
列出给定主题的所有请求。
为请求预加载主题和作业信息。 (也很重要。)
我对直接关联请求和作业犹豫不决,因为作业包含一些不应该对所有请求都可用的信息。通过该关联,任何请求都可以访问该信息,但这可能不是什么大问题。
另外,因为我需要请求和主题之间如此紧密的关联,所以使用这种关联似乎更合乎逻辑,但是我失去了轻松的工作访问权限。 (对于上述关联,我必须使用自定义方法:Job.find_by(topic_id: self.topic_id, worker_id: self.worker_id),它不允许预加载或多个请求。)
去这里最好的方式是什么?
(如果有更好的标题,请告诉我。)
【问题讨论】:
标签: ruby-on-rails postgresql activerecord database-design ruby-on-rails-4