小编leg*_*rob的帖子

Rails/Postgres 嵌套 JSON 查询

我的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)

如何进入学校属性内的值? …

postgresql json ruby-on-rails

6
推荐指数
1
解决办法
2038
查看次数

Rails MSSQL - TinyTds::错误:Adaptive Server 连接超时

我想尝试让 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)

sql-server ruby-on-rails freetds docker circleci

5
推荐指数
0
解决办法
2670
查看次数