1

使用 Rails 6 rc1,我正在对名为“Job”的模型进行查询。

工作模型(job.rb):

has_rich_text :description
belongs_to :company, dependent: :destroy, required: false

def self.search(query)  
  joins(:company, :description)
  .where.not(has_ended: true)
  .where("jobs.title ILIKE ?", query)
  .where("jobs.description ILIKE ?", query)
  .where("companies.name ~* ?", "^#{query}") # https://www.postgresql.org/docs/8.3/functions-matching.html
end

这正是我所拥有的。到目前为止,我的问题是包含has_rich_text. 在 rails 控制台中复制时出现的错误Job.joins(:description)

ActiveRecord::AssociationNotFoundError(在 Job 上找不到名为“description”的关联;也许你拼错了?

在搜索“hight and low”时,我找不到有关此级别查询的任何文档。我没试过scope 在这里提到

4

3 回答 3

0

实际上已经有一个由 has_rich_text 方法定义的 has_one 关系

github.com/rails/.../actiontext/lib/action_text/attribute.rb 第 37 行

# name on the next two lines is a reference to what you called your rich_text.
has_one :"rich_text_#{name}",
  -> { where(name: name) },
  class_name: "ActionText::RichText",
  as: :record,
  inverse_of: :record,
  autosave: true,
  dependent: :destroy

所以在你的情况下,你想加入 rich_text_description


为了搜索多个rich_texts,您可以添加一个has_many rich_texts 关系。

has_many :rich_texts,
  class_name: "ActionText::RichText",
  as: :record,
  inverse_of: :record,
  autosave: true,
  dependent: :destroy
于 2019-12-16T05:30:35.990 回答
0

事实证明你可以!我已经在我使用过的Rails Github 页面上发布了该方法,但需要知道是否有更好的方法。

于 2019-05-13T07:13:26.943 回答
0

我使用了内连接

模型关系是 1:1 和文章:action_text_rich_text

在文章模型

scope :search, -> (name) { joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = articles.id").where("action_text_rich_texts.body LIKE ? or articles.title like ?", "%#{name}%", "%#{name}%") }
于 2019-09-11T22:30:55.037 回答