【问题标题】:Rails counter cache with conditionRails 计数器缓存条件
【发布时间】:2019-01-09 13:49:35
【问题描述】:

我有一个 Rails 酒店应用程序,里面有房间。房间可以有 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 }

【问题讨论】:

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


    【解决方案1】:

    Rails 不提供带有 counter_cache 的条件。 where 子句和 each 也不起作用。

    要实现条件计数器,您可以在代码中使用自定义回调来管理计数器blog on custom counter_cache with conditions

    或者,您可以使用counter_culture gem、conditional-counter-cache

    请参考类似问题的答案 - Counter Cache for a column with conditions?

    【讨论】:

    • 我使用了 counter_culture gem,但条件不起作用我按照链接中的步骤操作,并有一些东西作为 counter_culture :room, column_name: proc {|model|模型状态? [0,1] 'tickets_count' : nil } 但它给了我一个错误,说语法错误,意外的 tIDENTIFIER,期望 keyword_do 或 '{' 或 '(' :room, column_name: proc {|model| model.status? [0 ,1 @tahahussain,我什至相应地编辑了我的问题
    • @MohammedSayer 看起来您在 proc 中使用的三元条件存在语法错误。请将您的过程修改为counter_culture :room, column_name: proc {|model| model.status.in?([0,1]) ? 'tickets_count' : nil }
    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多