条件付きの Rails カウンタ キャッシュ
概要
中に部屋がある 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 }
解決策
Rails は counter_cache による条件を提供しません。 where 句と each も機能しません。
条件付きカウンターを実現するには、コード内でカスタム コールバックを使用し、条件付きのカスタム counter_cache でカウンター ブログを管理します。
あるいは、counter_culture gem、conditional-counter-cache を使用することもできます。
同様の質問の回答を参照してください - 条件付きカラムのカウンターキャッシュ?