需要在对象中寻找特定措辞的范围方法的正确措辞

Need correct wording for scope method seeking specific wording in the object

我想不出这个范围方法的正确措辞。任务是创建一个范围方法,指定请求(有注释)只显示注释中带有单词 "kids" 的请求。我似乎无法找到正确的措辞来使它起作用

我试过了scope :requests_with_kids_in_note, -> { where('note').includes(text: "kids")}

scope :requests_with_kids_in_note, -> { select('note').where('note').includes(text: "kids")}

错误消息没有帮助

您可以使用 Arel 来编写该查询。

假设你有一个 Request 有一个 has_many :notes 关联,你可以这样写范围:

class Request < ApplicationRecord
  has_many :notes

  scope :with_kids_in_note, -> {
    joins(:notes).where(Note.arel_table[:content].matches('%kids%'))
  }
end

class Note < ApplicationRecord
  # In this model, i'm assuming that "content" is the column
  # in which you have to find the word "kids".
  belongs_to :request
end

您可以通过范围很容易地做到这一点,但您应该以不同的方式格式化 where 子句。另外我建议让它更通用:

scope :note_contains, -> (word) { where('note LIKE %?%', word) }

并像这样使用它:

Model.note_contains('kids')