Deeply associated column_names in counter_culture sum

326 views Asked by At

When defining column_names in a counter_culture method, is it possible to deeply associate? In the docs and examples its always an attribute belonging to the model that is used to determine column_names. But, what if the attribute belongs to an associated model?

example, this works

# Account model
counter_culture :user,
  column_name: Proc.new { |account| account.has_billable_hours? ? 'billed_hours_sum' : nil },
  delta_column: 'billed_hours',
  column_names: { ["account.billed_hours > ?", 0] => "billed_hours_sum" }

associated example

# Account model
counter_culture :user,
  column_name: Proc.new { |account| account.clients.has_billable_hours? ? 'billed_hours_sum' : nil },
  delta_column: 'billed_hours',
  column_names: { ["accounts.clients.billed_hours > ?", 0] => "billed_hours_sum" }

If, for the above, you could (you can't) use joins in the column_names method it would look like this

 joins(:account=>:client).where("accounts.clients.billed_hours > ?", 0)

The second example illustrates my question. How do you define the column_names when the attribute you need to evaluate does not belong to the parent model, but an associated model?

1

There are 1 answers

1
hellion On

column_names is only need when calling counter_culture_fix_counts. So, I just 86'ed the column_names option from the the method call and created a rake task to update that counter/column manually.