You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails ActiveAdmin用户页出现Ransack::Search未定义`email_equals'错误

Rails + ActiveAdmin + Ransack 报错:undefined method `email_equals' for Ransack::Search实例

错误日志

ActionView::Template::Error (undefined method `email_equals' for an instance of Ransack::Search):
    1: # frozen_string_literal: true
    2: insert_tag renderer_for(:index)

ransack (4.1.1) lib/ransack/search.rb:114:in `method_missing'

我的ActiveAdmin配置代码

ActiveAdmin.register User do
  index do
    id_column
    column :current_sign_in_at
    column :sign_in_count
    column :created_at
  end
end

环境版本

  • Rails Version: 7.1.2
  • Ruby Version: 3.3.0
  • ActiveAdmin Version: 3.2.0
  • Ransack Version: 4.1.1

问题背景

修复「Ransack需要显式将模型关联加入白名单」的问题后,出现上述错误。

解决方法

方法1:在User模型中声明允许Ransack搜索的属性

Ransack 4.x版本开始要求显式声明可搜索的模型属性,ActiveAdmin默认会尝试搜索email字段,但该字段未被加入白名单,导致报错。在User模型中添加如下代码:

class User < ApplicationRecord
  # 保留原有代码,新增以下方法
  def self.ransackable_attributes(auth_object = nil)
    # 若需要保留默认可搜索属性,用super追加email;也可明确列出所有允许的属性
    super + ['email']
    # 或者直接指定允许的属性:%w[id email current_sign_in_at sign_in_count created_at]
  end
end

方法2:自定义ActiveAdmin的搜索过滤器(关闭默认email搜索)

如果不需要搜索email字段,可在ActiveAdmin配置中替换默认的搜索过滤器,只添加需要的字段:

ActiveAdmin.register User do
  # 移除默认的搜索过滤器,添加自定义项
  filter :id
  filter :current_sign_in_at
  filter :sign_in_count
  filter :created_at

  index do
    id_column
    column :current_sign_in_at
    column :sign_in_count
    column :created_at
  end
end

内容的提问来源于stack exchange,提问作者IshAsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:22:43