has_many:通过vs直接的belongs_to

时间:2016-11-30 12:52:03

标签: ruby-on-rails

我很难为我的应用选择正确的模型架构。用户可以创建作业(JobRequest),这些作业正在按计划运行,因此每个JobRequest都有多次运行(JobRequestRun)。每次运行后,都会生成并附加到OutputDataFile的输出文件(JobRequestRun)(每次运行只有一个文件)。我应该可以通过调用JobRequest.output_data_filesJobRequestRun.output_data_file来访问这些报告文件。我无法满足我需要的计划:

JobRequest
  has_many output_data_files, through: job_request_runs

JobRequestRun
  belongs_to output_data_files
  belongs_to job_request

OutputDataFile
  has_many job_requests, through: job_request_runs

# OR

JobRequest
  has_many output_data_files
  has_many job_request_runs

JobRequestRun
  has_one output_data_file
  belongs_to job_request

OutputDataFile
  belongs_to job_request
  belongs_to job_request_run

其中哪一个对你有意义?

1 个答案:

答案 0 :(得分:2)

根据您对问题域的文字说明,我就想到了这一点:

class JobRequest < ActiveRecord::Base
  has_many :job_request_runs
  has_many :output_data_files, through: :job_request_runs
end

class JobRequestRun < ActiveRecord::Base
  belongs_to :job_request
  has_one :output_data_file
end

class OutputDataFile < ActiveRecord::Base
  belongs_to :job_request_run
  has_one :job_request, through: :job_request_run
end