我如何检查存储数组 '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。
所以我有一个 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。