has_many通过多个模型

时间:2014-09-01 09:22:06

标签: ruby-on-rails activerecord

我有两个主要模型:产品和服务。您可以创建与特定产品或服务相对应的问题。

用户通过创建与问题相对应的故障单来响应问题。或者,用户可以直接从产品或服务创建故障单。

创建故障单时,会显示与故障单所属的产品或服务相对应的任何先前(未响应)问题的列表,并且这些问题可以添加到故障单中。还可以创建新问题并将其添加到故障单中。

我想将两个数组unresponded_product_issues和unresponded_service_issues合并为一个数组。我如何将两个结合起来(即通过:产品和:服务)?

我正在使用Rails 3(3.2)。

class Service < ActiveRecord::Base
  has_many :tickets
  has_many :issues
end

class Product < ActiveRecord::Base
  has_many :issues
  has_many :tickets
end

class Issue  < ActiveRecord::Base
  belongs_to :product
  belongs_to :service
end

class Ticket  < ActiveRecord::Base
  belongs_to :service
  belongs_to :product
  has_many :issues
  has_many :unresponded_product_issues, :through=>:product, :source=>:issues, :conditions=>{:ticket_id=>nil}
  has_many :unresponded_service_issues, :through=>:service, :source=>:issues, :conditions=>{:ticket_id=>nil} 
  accepts_nested_attributes_for :unresponded_product_issues
  accepts_nested_attributes_for :unresponded_service_issues
end

更新:回应@ SteveTurczyn在下面的评论,我尝试声明如下方法:

def unresponded_issues
    unresponded_product_issues + unresponded_service_issues
end

我的erb模板中有一个表单(下方),我遇到的问题是以下错误:

ActionView::Template::Error (undefined method `id' for nil:NilClass):
<%= form_for [@ticket] do |f| %>
28:             <%= f.fields_for :unresponded_issues do |issue| %>
29:             <tr>
30:                 <td><%= issue.check_box :responded,
31:                     :id => "#{@ticket.id}-#{issue.object.id}" %></td>

请注意,如果迭代unresponded_product_issuesunresponded_service_issues,我会收到相同的错误,如果我将accepts_nested_attributes_for :unresponded_product_issuesaccepts_nested_attributes_for :unresponded_service_issues添加到故障单模型,则错误消失。

我尝试添加导致错误accepts_nested_attributes_for :unresponded_issues的{​​{1}}。

0 个答案:

没有答案