我正在学习 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
表为List
模型有列tasks_counter
and undone_tasks_counter
.
class Task < ActiveRecord::Base
belongs_to :list, :counter_cache => true
# .. some validations
end
有了这样的代码就有attr_readonly :tasks_counter
for 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
注:未实际测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)