添加Trix编辑器后,Rails中rich_text字段搜索失效如何解决?
解决Trix编辑器(has_rich_text)下内容搜索失效的问题
这问题我之前踩过坑!原因很直观:当你在Rails里用has_rich_text :content启用Trix编辑器时,富文本内容并不会存在posts表的content字段里——Rails会自动创建一个单独的action_text_rich_texts表,把实际的文本内容存在这个表的body字段中,同时通过关联和posts表绑定。你原来的查询直接搜posts.content,自然找不到任何内容啦。
修复方案
只需要修改Post模型里的搜索方法,关联到action_text_rich_texts表来查询实际的富文本内容:
修改后的post.rb代码
has_rich_text :content def self.search(search) joins(:content).where( 'posts.title ILIKE ? OR action_text_rich_texts.body ILIKE ?', "%#{search}%", "%#{search}%" ) end
额外优化(可选)
如果你的模型里有多个富文本字段(比如除了content还有summary),可以加上name字段的条件,确保只搜索content对应的富文本内容,避免混淆:
def self.search(search) joins(:content).where( '(posts.title ILIKE ? OR action_text_rich_texts.body ILIKE ?) AND action_text_rich_texts.name = ?', "%#{search}%", "%#{search}%", 'content' ) end
为什么这样有效?
joins(:content)会建立posts表和action_text_rich_texts表的关联(因为has_rich_text :content自动生成了这个关联)action_text_rich_texts.body才是存储你在Trix编辑器里输入的实际内容的字段- 保持
posts.title ILIKE ?不变,这样标题搜索依然正常工作
你的控制器代码完全不需要修改,保持原来的逻辑就可以啦。
内容的提问来源于stack exchange,提问作者SsPay
相关产品推荐
相关产品推荐

