如何在rails中使用ActiveRecord::TypedStore查询布尔值

问题描述 投票:0回答:1

使用 ActiveRecord::TypedStore 查询布尔值的语法是什么(Github 链接)?

尝试以下方法似乎不起作用?并抛出以下错误:

PG::UndefinedFunction:错误:运算符不存在:文本=布尔值

current_user
  .companies
  .where("holiday_request_settings ->> :key = :value",
         key: "enable_holiday_requests",
         value: true)

如果我尝试以下操作,则没有结果:

current_user
  .companies
  .where("holiday_request_settings ->> :key = :value",
         key: "enable_holiday_requests",
         value: "true")

公司目前拥有以下数据:

holiday_request_settings: {
  "enable_holiday_requests"=>true,
  "holiday_allowance_days"=>20
}

这是公司模型上的代码:

class Company < ApplicationRecord
  has_many :holiday_requests

  typed_store :holiday_request_settings, coder: JSON do |s|
    s.boolean :enable_holiday_requests, default: false
    s.integer :holiday_allowance_days
  end

end

公司模型迁移:

add_column :companies, :holiday_request_settings, :json

有什么想法吗?

ruby-on-rails ruby activerecord
1个回答
0
投票

抱歉来晚了

我的解决方案是在包含 TypedStore json 对象的类上创建一个作用域

这样我就不会在其他地方弄乱代码,并且以后可以轻松地重用它。

对于这个用例,它可能是:

scope : enabled_holiday_requests, -> { where("holiday_request_settings ->> 'holiday_request_settings' = 'true'") }

然后像这样查询:

current_user.companies.enabled_holiday_requests
© www.soinside.com 2019 - 2024. All rights reserved.