首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Rails 5.2中从mysql查询数组列?

如何在Rails 5.2中从mysql查询数组列?
EN

Stack Overflow用户
提问于 2018-11-28 04:04:39
回答 2查看 2.9K关注 0票数 0

我正在使用gem rails~> 5.2gem mysql2 >= 0.3.13, < 0.5

我有一个模型Lawer,它有一个数组列lawer_filed sic。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Model lawer.rb

serialize :lawer_field, Array

然后我创建了一个Lawer,我可以得到如下的lawer_field值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
=> Lawer.first.lawer_field

=> ["2", "3", "5"] 

现在,我想使用Lawer找到一个带有查询的lawer_field。我试过:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@lawer = Lawer.where("lawer_field && ARRAY[?]", "2")

它引发了这样一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ActiveRecord::StatementInvalid (Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '['2']) LIMIT 11' at line 1: SELECT  `lawers`.* FROM `lawers` WHERE (lawer_field && ARRAY['2']) LIMIT 11)

我的SQL语法有一个错误,但我不知道如何修复它。有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-28 05:58:02

MySQL与PostgreSQL不同,它不支持数据库中的数组。因此,您需要添加这一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serialize :lawer_field, Array

这意味着数据库中有一个string字段,但是每当ActiveRecord解压缩数据库返回的结果时,它就直接将它们映射到Ruby的一个实例中。这意味着您在数据库中筛选结果的唯一选项是使用任何MySQL字符串比较函数、LIKE等。

您的选项是使用LIKE或执行其他一些字符串函数 (由于无法使用索引而性能不佳),或者构建另一个表,向表中添加has_many关联,并按预期的方式使用MySQL。当然,您也可以迁移到PostgreSQL,但这似乎是最极端的选择。

编辑:您也可以考虑使用最近添加的MySQL`s的JSON。不过,这取决于您的MySQL版本。

票数 2
EN

Stack Overflow用户

发布于 2018-11-28 04:15:08

我没有尝试这个答案,因为我没有任何Rails项目可供测试,但我认为问题在于语法。

我觉得应该是这样:

Lawer.where("lawer_field IN (?)", "2")

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53519090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文