【问题标题】:Query based on the combination of two columns in Rails Active RecordRails Active Record中基于两列组合的查询
【发布时间】:2019-12-10 18:08:17
【问题描述】:

我有一个用户模型,它有两列,即名称和标签。 这些列的组合在下面的数组中给出

name_and_label_array = [["name1", "label1"], ["name2", "label2"], ["name3", label3"]

我想查询只有那些用户应该返回其名称和标签组合存在于 GIVEN 数组(name_and_label_array)中。

我尝试使用下面的代码,但它会引发 MYSQL 语法错误

User.where("[name, label] in ?", name_and_label_array)

请建议一些在 ActiveRecord 中处理此问题的有效方法。

在原始的MYSQL中,我们可以这样写

select name, label from users where (name, label) in (('name1', 'label1'), ('name2', 'label2'));

提前谢谢你。

【问题讨论】:

  • 如果将[name, label] in ?更改为(name, label) in ?会怎样
  • @Vasilisa 得到同样的错误TypeError: can't quote Array

标签: mysql ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord


【解决方案1】:

您可以为数组的数组生成占位符。

placeholders = (['(?)'] * name_and_label_array.size).join(',')
User.where("(name, label) in (#{placeholders})", *name_and_label_array)

【讨论】:

    猜你喜欢
    • 2013-06-27
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多