首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ActionText属性中搜索文本

在ActionText属性中搜索文本
EN

Stack Overflow用户
提问于 2020-01-03 16:37:33
回答 2查看 777关注 0票数 5

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

代码语言:javascript
复制
has_rich_text :content

现在我有了一个简单的搜索,我想在content中搜索文本,所以我有这样的东西:

代码语言:javascript
复制
@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}%")

但这会给出一个错误:

代码语言:javascript
复制
PG::UndefinedColumn: ERROR:  column action_text_rich_texts.content does not exist

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-04 01:51:45

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

代码语言:javascript
复制
# 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,但用于不同的模型:

代码语言:javascript
复制
@posts = Post.joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = posts.id AND record_type = 'Post'")

您可以通过设置关联,这样您就不必手动加入:

代码语言:javascript
复制
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

整个查询是这样的:

代码语言:javascript
复制
@posts = Post.joins(:action_text_rich_text)
             .where("action_text_rich_texts.body LIKE ?", "%#{search_text}%")
票数 8
EN

Stack Overflow用户

发布于 2020-02-10 00:53:45

谢谢,麦克斯,我整天都在用Ransack来解决这个问题。

所以我补充道:

has_one :action_text_rich_text,class_name:‘动作文本::RichText’,as::record

然后在我的搜索字段中使用了_or_action_text_rich_text_body_,它就像一个护身符。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59575397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档