在counter_culture sum中深度关联column_names

时间:2014-11-09 20:52:51

标签: ruby-on-rails-4 counter-cache

在counter_culture方法中定义column_names时,是否可以深度关联?在文档和示例中,它始终是属于用于确定column_names的模型的属性。但是,如果属性属于关联模型会怎么样?

示例,这可以

# 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" }

相关示例

# 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" }

如果,对于上述情况,您可以(您不能)在column_names方法中使用连接,它将看起来像这样

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

第二个例子说明了我的问题。当您需要评估的属性不属于父模型但属于关联模型时,如何定义column_names?

1 个答案:

答案 0 :(得分:0)

只有在调用counter_culture_fix_counts时才需要

column_names。所以,我只是对方法调用中的column_names选项进行了86次操作,并创建了一个rake任务来手动更新该计数器/列。