【问题标题】:How to search in array column with multi values in postgresql rails如何在postgresql rails中搜索具有多个值的数组列
【发布时间】:2020-08-17 16:24:16
【问题描述】:

我有两个两个模型posttags,我想在哪里发布一些标签。

  • tag.rb
post_id  integer  3
tags     array  {'v1', 'v2'}

在标签模型中搜索时工作Tag.where('tag && array[['v1', 'v2']]')

但是当在帖子中添加这个时不起作用Post.where('tags.tags && array[['v1', 'v2']]')

每篇文章都有一个标签

【问题讨论】:

  • 您在Post 模型上使用array 来存储Tag 标识符数组,以便您可以将标签与帖子相关联,对吗?如果是这样,为什么不使用关联?
  • 发布 has_one 标签已经是你为什么不使用关联
  • 对不起,我误读和误解了。看起来Post 有一个Tag 和一个Tag 存储tags 的数组。对吗?
  • 现在是的

标签: ruby-on-rails ruby postgresql


【解决方案1】:

最直接/最原始的方法是这样的:

Post.joins(:tags).where("ARRAY['v1', 'v2'] <@ tags.tags")

关于将用户输入的值注入发送到数据库的字符串中的强制性警告,用于WHERE 子句。

【讨论】:

  • 感谢@kache 我尝试了您的解决方案,但是当使用动态值时不起作用" ARRAY#{tags} &amp;&amp; tags.tags"
  • 如果tags.to_s 没有输出以['v1', 'v2'] 形式序列化的内容,那么这将不起作用。您还使用了错误的运算符。
  • 我知道必须标记数组,例如" ARRAY[\"v1\"] &lt;@ tags.tags"
  • ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column "v1" does not exist
  • 同样,['v1']["v1"] 不同。使用单引号:['v1', 'v2']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 2014-09-11
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
相关资源
最近更新 更多