gpt4 book ai didi

ruby-on-rails - 在 ActionText 属性中搜索文本

转载 作者:行者123 更新时间:2023-12-03 15:43:38 26 4
gpt4 key购买 nike

我有一个 Post模型,此模型使用 ActionText 作为属性 content :

has_rich_text :content

现在我有一个简单的搜索,我想在 content 中搜索文本,所以我有这样的事情:
@posts = Post.joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = posts.id").where("action_text_rich_texts.content LIKE ?", "%#{search_text}%")

但这给出了一个错误:
PG::UndefinedColumn: ERROR:  column action_text_rich_texts.content does not exist

在 ActionText 属性中搜索文本的正确方法是什么?

最佳答案

这是rails action_text:install生成的迁移:

# This migration comes from action_text (originally 20180528164100)
class CreateActionTextTables < ActiveRecord::Migration[6.0]
def change
create_table :action_text_rich_texts do |t|
t.string :name, null: false
t.text :body, size: :long
t.references :record, null: false, polymorphic: true, index: false
t.timestamps

t.index [ :record_type, :record_id, :name ], name: "index_action_text_rich_texts_uniqueness", unique: true
end
end
end

它告诉我们内容存储在 action_text_rich_texts并且它使用多态关联来链接到记录。

因此,您需要在连接中同时提供类型和 id,因为可以有多行具有相同的 id 但适用于不同的模型:
@posts = Post.joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = posts.id AND record_type = 'Post'")

您可以通过设置关联,这样您就不必手动加入:
class Post < ApplicationRecord
has_rich_text :content
# used to query the attached ActionText directly
has_one :action_text_rich_text,
class_name: 'ActionText::RichText',
as: :record
end

整个查询如下:
@posts = Post.joins(:action_text_rich_text)
.where("action_text_rich_texts.body LIKE ?", "%#{search_text}%")

关于ruby-on-rails - 在 ActionText 属性中搜索文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59575397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com