ruby-on-rails - 事件记录检查属性是否在基于另一个属性的数组中

标签 ruby-on-rails ruby postgresql activerecord ruby-on-rails-5

在我的 Ruby on Rails 项目中,我有一个 Message 模型,它的属性 direction 为“传入”或“传出”。 Message 的另一个属性是 body,它表示消息的实际内容。我正在使用 Rails 5.1.2。

现在,我想选择消息,同时排除正文在数组中的传入消息,比如 ['a','b','c']

例如,如果我的数据库中有以下消息:

{direction: 'outgoing', body: 'a'}
{direction: 'outgoing', body: 'b'}
{direction: 'outgoing', body: 'd'}
{direction: 'incoming', body: 'd'}
{direction: 'incoming', body: 'c'}

我只想选择除最后一条消息之外的消息,即 {direction: 'incoming', body: 'c'}

我试过了

Message.where.not(["direction = ? and body != ?","incoming","['a','b','c']"]) 这个只返回给我传出的消息,但缺少正文为“d”的传入消息。

有什么建议吗? 谢谢。

最佳答案

根据帖子中提到的描述,您想在数组对象上使用 sql 来拒绝元素。

为此修改查询以接受数组作为参数而不是帖子中提到的字符串。

Message.where.not("direction = ? and body IN (?)","incoming",['a','b','c'])

关于ruby-on-rails - 事件记录检查属性是否在基于另一个属性的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52429740/

相关文章:

ruby-on-rails - Rails 5 失败测试 ActiveRecord::AssociationTypeMismatch

ruby-on-rails - Rails 4 - 命名空间内的首字母缩写词 Controller 给出 'Uninitialized Constant' 错误

ruby-on-rails - 在 Windows 10 上安装 Rails 时出错

ruby-on-rails - 使用 rspec 和 authlogic 进行测试时的用户登录

javascript - 在我的 Rails 投票系统中包含 Ajax/JS

ruby-on-rails - Nginx 背后的瘦子 "no live upstreams while connecting to upstream"

ruby-on-rails - 点击 Print 给出一个屏幕截图以保存在 rails3 中

postgresql - 当行大小超过页面中可用的可用大小时,postgres 如何在页面中存储行?

javascript - 行查询中的单引号( Sequelize )

sql - PostgreSQL:创建索引以快速区分 NULL 和非 NULL 值