有条件的Rails计数器缓存

时间:2018-08-01 21:39:32

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

我有一个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 }

1 个答案:

答案 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?