2015-02-08 47 views
0

我在我的应用程序中有各种相关的模型。我已经设置了Draper来在父类的初始化时装饰关联。Rails德雷珀宝石引发未定义的方法嵌套模型

我有以下类别:

Customer (has_many :accounts) 
Account (belongs_to :customer && has_many :facilities && has_one :contact) 
Contact (belongs_to :account) 
Facility (belongs_to :account) 

我发起一个装饰如下:

@customer = Customer.find_by(:token => params[:token]).decorate 

在我account_decorator添加以下内容:

decorates_association :contact 
decorates_association :facilities 

...和在我的客户装饰中,我有:

decorates_association :accounts 

我遇到的问题是未定义的方法异常显示在facility_decorator中定义的任何方法。 contact_decorator工作得很好。我确信我的AR映射是正确的,所以它不可能是这样。

有什么建议吗?

+1

也许有一个与'Facility'装饰者无关的问题。你有没有尝试删除关联,只是实例化装饰'Facility',只是为了消除这种情况? – Ninjarabbi 2015-02-08 21:42:59

+0

@Ninjarabbi,我已经测试了它自己的实例化设施,并在其上使用了.decorate。这似乎在这种情况下工作,因为我可以通过它的外观访问FacilityDecorator方法 – Herm 2015-02-09 14:53:47

+0

“contact”和“facility”之间没有区别。没有看到所有的代码就很难弄明白。我试图通过将'account'和'contact'之间的关系改变为'has_many'来消除因素,看看它是否仍然有效。然后,我会尝试在这两个模型之间复制部分代码,直到找到使'contact'工作和'facility'不工作的原因。 – Ninjarabbi 2015-02-09 21:41:41

回答

0

我通过eager_loading关联解决了这个问题。

@customer = Customer.eager_load({ :account => [:facilities]}).find_by(:token => params[:token]).decorate 

这也改善了总体查询时间,所以我很满意解决方案!

相关问题