2015-02-08 2 views
0

У меня есть различные связанные модели в моем приложении. У меня есть настройка Draper для украшения ассоциаций при инициализации родительского класса.Rails Draper Gem повышение неопределенного метода для вложенной модели

У меня есть следующие классы:

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 

Проблема, с которой я столкнулся, заключается в том, что исключение неопределенного метода показано для любого метода, определенного в объекте_декораторе. Функция contact_decorator работает отлично. Я убедился, что мое сопоставление AR правильное, так что это не может быть так.

Любые предложения?

+1

Возможно, существует некоторая проблема с декоратором 'Facility'. Вы пытались удалить ассоциации и просто создать экземпляр украшенного «Facility», просто чтобы это устранить? – Ninjarabbi

+0

@Ninjarabbi, я протестировал экземпляр объекта на его собственном и использовал .decorate. Кажется, что это работает в этом случае, так как я могу получить доступ к методам FacilityDecorator – Herm

+0

по внешнему виду, нет никакой разницы между 'contact' и' facility'. Трудно это понять, не видя всего кода. Я попытаюсь устранить факторы, изменив связь между 'account' и' contact', чтобы быть 'has_many', и посмотреть, все ли работает. Затем я попытаюсь воспроизвести части кода между этими двумя моделями, пока не найду, что делает работу «контакт» и «объект» не работает. – Ninjarabbi

ответ

0

Я решил эту проблему с помощью eager_loading ассоциаций.

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

Это также улучшило общее время запроса, поэтому я доволен решением!

Смежные вопросы