0

У меня есть ActiveRecord модель (я буду называть как владельцем), который фактически является контейнер для другого типа модели (я буду называть как ) владение, хранящегося в has_many через ассоциацию , Фактически почти все его атрибуты основаны на накопленных данных из его многочисленных поведений.откладывая Атрибуты для ассоциации

Например, для начала и конца года, который будет основан на ранних и последних годах его постов. Он также должен иметь теги ассоциация, которая состоит из всех тегов со всех своих постов. Так эффективно все владелец есть, является перечислением данных со всех его постов.

Как я должен справиться с этим? Мне нужно владельцев, которые можно искать с помощью * pg_search *, поэтому я не могу просто использовать виртуальные атрибуты в качестве аксессуаров для перечисления атрибутов поведений, и это было бы очень дорого.

Должен ли я смотреть на имеющие владелец повторно вычислить его атрибуты всякий раз, когда владении сохраняется, так что они только пересчитывается один раз за каждую смену, а не каждый раз, когда они нужны?

Я в затруднении, как с этим справиться, поэтому любые предложения будут оценены.

+0

Вы рассматривали использование объединений? –

+0

@HeliosdeGuerra Пожалуйста, можете ли вы разработать? – Undistraction

ответ

1

Вы изучали использование SQL-соединений? Что-то вроде:

@owners = Owner.find(
    :all, 
    :select => 'owners.*, sum(possessions.amount) as total_amount', 
    :joins => 'left outer join possessions on possessions.owner_id = owners.id', 
    :conditions => { 'owners.active => false }, 
    :group => 'owners.id', 
    :order => 'owners.name' 
) 

Это дает вам отношение ActiveRecord с дополнительными атрибутами, которые определяют в выбранном вызове, так что в этом случае вы можете получить доступ к сумме в качестве нормального атрибута, например,

@owners.first.total_amount 

Не уверен, как работает pg_search, но похоже, что он совместим с SQL-соединением?

Редактировать: Упс, эта первоначальная находка должна находиться на Владельце, а не на Владении.

+0

Спасибо. Я думаю, проблема с этим подходом заключается в том, что атрибуты доступны только в экземплярах ActiveRecord, возвращаемых этим запросом. Когда 'pg_search' или другой Gem строят свой собственный запрос, он не будет использовать соединение, поэтому эти атрибуты не будут добавлены. – Undistraction

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