我正在学习Rails,并遇到一个小问题.我正在写死亡的简单应用程序与任务列表,所以模型看起来像这样:
class List < ActiveRecord::Base has_many :tasks has_many :undone_tasks,:class_name => 'Task',:foreign_key => 'task_id',:conditions => 'done = false' # ... some validations end
列表模型的表有列tasks_counter和undone_tasks_counter.
class Task < ActiveRecord::Base belongs_to :list,:counter_cache => true # .. some validations end
有了这样的代码,有attr_readonly:tasks_counter用于List实例,但是我也想要一个计数器来撤销任务.有没有办法让Rails自动缓存多个计数器.
到目前为止,我已经设法创建TasksObserver,它增加或减少Task#undone_tasks_counter,但也许有一个更简单的方法.
解决方法
您是否尝试过自定义缓存列?
这里的文档:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
这里的文档:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
它表明您可以将列名传递给counter_cache选项,您可以将其调用两次,例如
belongs_to :list,:counter_cache => true # will setup tasks_count belongs_to :list,:counter_cache => :undone_tasks_count
注意:没有实际测试.