我的events表中有一个名为 的JSON 列payload。我可以创建一个这样的事件:
Event.create!(application_id: 1, stage: 'INITIATION', payload: { key: 'OUTCOME', value: {school_id: 2, prefered_language: 'GBP'}})
Run Code Online (Sandbox Code Playgroud)
简单的查询,例如
Event.where("payload->>'key' = ?", "OUTCOME")
Run Code Online (Sandbox Code Playgroud)
可以正常工作,但是如何使用嵌套在该value部分中的 JSON 添加额外的过滤器
Event.where("payload->>'key' = ? AND payload ->>'value'->>'school' = ?", "OUTCOME", 2)
^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我尝试过,但我得到:
PG::UndefinedFunction: ERROR: operator does not exist: text ->> unknown
LINE 1: ...ad ->>'key' = 'INPUTPARAMS' AND payload ->>'value'->>'school... ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
如何进入学校属性内的值? …
我想尝试让 Rails 和 MSSQL 在我们的 CI 工具 CircleCI 中进行对话。我在 Mac 上工作,所以设置起来相当轻松。我使用 Homebrew 在本地安装了 FreeTDS。然后我生成了一个 MSSQL docker 映像,并在 Rails 应用程序中设置我的配置以指向它,一切正常。
CircleCI 有点不同。
我做了以下事情。
在我的 gemfile 中添加:
# mssql database gems
gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'
Run Code Online (Sandbox Code Playgroud)
修改了我们的database.yml文件:
default: &default
adapter: sqlserver
pool: 5
encoding: utf8
mode: dblib
development:
<<: *default
host: localhost
database: collections_development
username: sa
password: P@55w0rd
test:
<<: *default
host: localhost
database: collections_test
username: sa
password: P@55w0rd
Run Code Online (Sandbox Code Playgroud)
我用以下命令构建了一个 docker 镜像:
FROM circleci/ruby:2.4.1-node-browsers
RUN set -ex \
&& sudo apt-get install build-essential …Run Code Online (Sandbox Code Playgroud)