我有一个Rails hotel应用程序,里面有房间。客房可以关联n张门票。我创建了带有反文化宝石的反缓存,该反缓存会使用分配给它的门票数量更新房间表, 问题是我只想统计已打开或正在处理的票证。我有这段代码,它可以正常工作,但不能与条件一起工作,有人可以通过让我知道如何在条件下工作来指导我吗?感谢您的帮助
房间表迁移文件
class AddTicketsCountToRooms < ActiveRecord::Migration[5.0]
def self.up
add_column :rooms, :tickets_count, :integer, null: false, default: 0
end
end
Ticket.rb文件
belongs_to :room
counter_culture :room, column_name: proc {|model| model.status? [0,1] 'tickets_count' : nil }
这与where子句和 给我错误提示
syntax error, unexpected tSTRING_BEG, expecting '}' {|model| model.status? [0,1] 'tickets_count' : nil } ^ /Users/mohammedsayerwala/Documents/Aqua/app/models/ticket.rb:8: syntax error, unexpected ':', expecting keyword_end tatus? [0,1] 'tickets_count' : nil }
答案 0 :(得分:2)
Rails不提供使用counter_cache的条件。 where
子句和each
也不起作用。
要获得条件计数器,您可以在代码中使用自定义回调来管理计数器blog on custom counter_cache with conditions。
或者,您可以使用counter_culture宝石,conditional-counter-cache
请参考类似问题的答案- Counter Cache for a column with conditions?