关联数据表并在Ruby

时间:2017-03-11 09:36:40

标签: ruby-on-rails ruby

基本上,我有3个数据表。 “jobs”,“期间”和相关表格“JobPeriodAssociation”。

现在,JobPeriodAssociation显示作业和期间的所有可能组合。例如。我有2个作业(j1,j2)和2个句点(t1,t2),表格将显示4行:j1t1,j1t2,j2t1,j2t2。

如果我现在在“句点”表中添加句点,它会通过添加(预定义的)第3期/作业组合自动更新“JobPeriodAssociation”表。 .A。 j1t1,j1t2,j1t3,j2t1,j2t2,j2t3。

这是通过periods_controller

中的更改操作完成的
def change
@mynumber_of_periods = params[:mynewnumber].to_i
@number_of_periods = Period.count
number_of_missing_periods=@mynumber_of_periods - @number_of_periods

if number_of_missing_periods > 0
  @jobs = Job.all
  @nanns = Nann.all
  (1..number_of_missing_periods).each do |number|
    name="t#{number+@number_of_periods}"
    @new_period=Period.create!(name: name)
    @jobs.each { |jo|
      JobPeriodAssociation.create(job_id: jo.id, period_id: @new_period.id, apples: 2, bananas: 2, milk: 2, beer: 2)
    }
  end
end

(+显然路线和索引视图中有一些小的改动)

创建作业时,我使用多个参数创建它(请参阅此处附带的图像:TABLES)截至目前,参数不会被推送到JobPeriodAssociation表,我只想出了一个方法硬编码,如本主题的第一个清单所示

    @new_period=Period.create!(name: name)
    @jobs.each { |jo|
      JobPeriodAssociation.create(job_id: jo.id, period_id: @new_period.id, apples: 2, bananas: 2, milk: 2, beer: 2)
    }

因此,JobPeriodAssociation表中每个新创建的条目都包含参数2,2,2,2。 但是,我想将创建的作业(包括其参数)推送到附加图像中显示的JobPeriodAssociation。你有什么想法吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

你有没有在Period和Job之间做一个Join,那就是JobPeriodAssociation? 也许我误解了你的问题,我告诉我很抱歉。请让我们讨论一下,以帮助您解决问题。

enter image description here

您可以通过以下链接更好地了解我的意思:

http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

如果这是你试图解决的问题,那么最好的方法是尽管JobPeriodassociation有一个has_many。这是完整解释的链接。

联接将包含以下内容

工作模式

has_many  :jobperiodassociations

期间模型

has_many :jobperiodassociations

JobPeriodAssociation

belongs_to :job
belongs_to :period => all the entries of jobperiodassociations will be retrieved with the foreign key job_id in jobperiodassociations

工作实例:

job = Job.new
job.jobperiodassociations = [] => all the entries of jobperiodassociations will be retrieved with the foreign key job_id in jobperiodassociations

期间实例

period = Period.new
period.jobperiodassociations = []

jobperiodassociations实例有两个外键,一个用于工作,一个用于句点。

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association