我有一个Post
模型,这个模型使用了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
型
在“文本”属性中搜索文本的正确方法是什么?
3条答案
按热度按时间50pmv0ei1#
以下是
rails action_text:install
生成的迁移:字符串
它告诉我们内容存储在
action_text_rich_texts
中,并且它使用多态关联来链接到记录。所以你需要在join中同时提供type和id,因为可能有多个行具有相同的id,但用于不同的模型:
型
您只需通过设置一个关联,就不必手动加入:
型
整个查询内容如下:
型
ruyhziif2#
谢谢你,Max,我一整天都在用Ransack解决这个问题。
所以我补充说:
has_one:action_text_rich_text,class_name:'文本::RichText',as::record
然后在我的搜索字段中使用_or_action_text_rich_text_body_,它就像一个魅力。
bkkx9g8r3#
字符串
Rails会自动添加一个
has_one
关联rich_text_#{name}
:型
您可以使用它来连接和搜索
action_text_rich_texts
表:型