2014-02-12 27 views
0

我有与ProductDocument模型通过has_many/belongs_to关系相关的Department父模型。然后,ProductDocument模型通过has_many :through关系通过ProductDocuments连接模型相互关联。确保父车型是相同的的has_many:通过协会轨3.2

作为关联的一部分,要求ProductDocument模型在相互关联时具有相同的Department父模型。

现在我做的是以下几点:

ProductDocumentsController < ApplicationController 
    ... 
    def create 
     @product = Product.find(params[:product_document][:product_id]) 
     @document = Document.find(params[:product_document][:document_id]) 

     if @product.department.id == @document.department.id 
      ... 
     end 
    end 
    ... 
end 

这工作,但是感觉效率不高,因为它介绍了控制器配备了两个另外的数据库调用。

有没有人知道一种方式,这可以通过更有效的方式完成,也许通过模型中的验证?

任何帮助将不胜感激;谢谢!

+1

“表示产品和文档模型在彼此关联时具有相同的产品父模型”。你的意思是“同一个部门”? – marvelousNinja

+0

@marvelousNinja我确实,谢谢你指出。 – dSquared

回答

0

这是我的想法。拿铅笔,纸和我画=)。我已经结束了这样的事情。

Department * * * Product 
*     * 
*     * 
*     * 
Document * * * ProductDocument 

这是一种叫循环引用。通常情况下,它会导致类似于你的情况 - 在可能的无限数量的表中复杂验证字段相等性。那么,我们如何解决它?

夫妇变种:

  1. 只要打破环节之一。例如,Document将单独参考Product
  2. ProductDocument中删除对Department的引用,并将它放在其他位置。例如,到ProductDocument(但是,它将被重新命名为更合适的东西,因为它将加入三个模型)。

这就是我现在可以说的。