Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此jsonb SQL查询转换为活动记录查询?_Sql_Ruby On Rails_Postgresql_Activerecord_Ruby On Rails 6 - Fatal编程技术网

如何将此jsonb SQL查询转换为活动记录查询?

如何将此jsonb SQL查询转换为活动记录查询?,sql,ruby-on-rails,postgresql,activerecord,ruby-on-rails-6,Sql,Ruby On Rails,Postgresql,Activerecord,Ruby On Rails 6,以下数据显示在myColorActiveRecord模型中: 身份证件 彩色物品 1. [{“东西”:“杯子”,“颜色”:“红色”},{“东西”:“汽车”,“颜色”:“蓝色”}] 2. [{“东西”:“其他”,“颜色”:“绿色”},{“东西”:“瓷砖”,“颜色”:“红色”}] 3. [{“东西”:“未知”,“颜色”:“红色”}] 4. [{“东西”:“篮子”,“颜色”:“天鹅绒或红色或紫色”}] 如果使用ActiveRecord,情况不会有多大变化,而且在我看来,如果将查询保留为SQL中的查询,

以下数据显示在my
Color
ActiveRecord模型中:

身份证件 彩色物品 1.
[{“东西”:“杯子”,“颜色”:“红色”},{“东西”:“汽车”,“颜色”:“蓝色”}]
2.
[{“东西”:“其他”,“颜色”:“绿色”},{“东西”:“瓷砖”,“颜色”:“红色”}]
3.
[{“东西”:“未知”,“颜色”:“红色”}]
4.
[{“东西”:“篮子”,“颜色”:“天鹅绒或红色或紫色”}]

如果使用ActiveRecord,情况不会有多大变化,而且在我看来,如果将查询保留为SQL中的查询,它的可读性会更高

要使其正常工作,您可以使用
from
,并传递您当前拥有的原始
from
子句:

from("colors AS c, JSONB_ARRAY_ELEMENTS(colored_things) AS colorvalues(colorvalue)")
如果您的表和别名已经可以访问,那么您可以将
WHERE
SELECT
子句与其相应的AR方法链接起来:

Color
  .from("colors AS c, JSONB_ARRAY_ELEMENTS(colored_things) AS colorvalues(colorvalue)")
  .where("colorvalue->>'color' ILIKE '%pur%'")
  .select("DISTINCT c.*")
请注意,
其中(“colorvalue->'color'i类似“%”?%”,value)
将不起作用,因为
由ORM引用,因此您必须构造“
%value%
”并将其用作绑定值:

where("colorvalue->>'color' ILIKE ?", "%#{value}%")

当然,中的
是缺失的拼图!非常感谢,回答很好:-)(尝试在ActiveRecord中这样做的主要原因是为了避免在清除用户输入时出现一些麻烦。我同意您的观点,纯SQL通常更具可读性。)
中的
涵盖了许多类似的情况,但遗憾的是它缺少文档。无耻的插件,我写了一个,你可以在这些情况下使用。