我如何检查存储数组 'includes' 的列是否有传递给 'where' 的参数?

How do I check to see if a column that stores an array 'includes' a parameter passed in to a 'where'?

所以我有一个 Question 模型,其中包含以下列:

#  refactor_rules          :string           default([]), is an Array

存储这样的值:

>> Question.offset(1).last.refactor_rules
=> ["dry", "concise"]

我想编写一个 where 查询来检查是否有任何问题在该 refactor_rules 属性中包含单个 parameter/option。

我试过这个查询:

@questions = Question.includes(:user, :answer).where(refactor_rules: params[:rule])

但这没有用。它给了我以下错误:

PG::InvalidTextRepresentation: ERROR:  malformed array literal: "dry"

我知道 AR 期待 string,但得到的是数组。

我只是不太明白如何根据传入的字符串 "dry" 或 "concise" 检查该属性的每个值。

编辑 1

问题模型

class Question < ApplicationRecord
  belongs_to :user
  belongs_to :accepted_answer, class_name: "Answer", dependent: :destroy
  has_many :answers, dependent: :destroy
end

答案模型

class Answer < ApplicationRecord
  belongs_to :question
  belongs_to :user
  has_one :answered_question, class_name: "Question", foreign_key: "accepted_answer_id"    
end

如果您谈论的是 Postgresql 数组列,请查看 this blog post,它很好地总结了在 rails.

下使用这种类型的列

您应该能够使用以下语法找到任何匹配 refactor_rule 的记录:

Question.where("? = ANY (refactor_rules)", params[:rule])

有关更多文档,请参阅 ANY operator