如何在Rails Admin编辑页自定义HABTM关联搜索框仅按邮箱查询
解决Rails Admin关联搜索仅匹配邮箱的问题
问题原因
你当前的searchable_columns配置未生效,是因为Rails Admin处理关联字段搜索时,默认会继承关联模型(此处为User自身)的全局搜索配置,导致额外字段被自动加入查询条件。
解决方案
通过search_query选项自定义关联字段的搜索逻辑,强制仅匹配邮箱字段:
修改后的Admin配置代码
module User::Admin extend ActiveSupport::Concern rails_admin do edit do field :blocked_users do label 'Blocked Users' searchable true # 自定义搜索查询,仅匹配邮箱 search_query do ->(search_term) { where("users.email ILIKE ?", "%#{search_term}%") } end end end end end
替代方案:全局限制User模型的搜索字段(可选)
如果希望所有涉及User的搜索都仅匹配邮箱,可在User模型的Rails Admin配置中全局设置:
# 在User的Admin配置中添加 rails_admin do # 仅开启邮箱的搜索功能 configure :email do searchable true end # 禁用其他字段的搜索性 configure :reset_password_token do searchable false end configure :remember_token do searchable false end # 其他不需要搜索的字段同理设置searchable false end
效果验证
修改后生成的SQL会符合预期:
SELECT "users".* FROM "users" WHERE ((users.email ILIKE '%inbar%'))
内容的提问来源于stack exchange,提问作者Michael Wijaya
相关产品推荐
相关产品推荐

