Rails Admin通过嵌套belongs_to关联搜索User姓名字段如何配置
修复方案
步骤1:调整Rails Admin配置
你需要明确指定搜索字段所属的嵌套关联路径,同时手动触发关联join确保users表被加载到查询中,修改TenantReferenceAdmin配置如下:
module TenantReferenceAdmin extend ActiveSupport::Concern included do rails_admin do list do # 手动加载两级关联,确保users表被加入查询 joins tenant: :user field :tenant do filterable true queryable true # 指定搜索字段属于tenant关联下的user模型 searchable [{user: [:first_name, :last_name]}] end ...
步骤2(兜底兼容方案)
如果你的Rails Admin版本无法自动解析嵌套关联的字段路径,可以直接写死字段的完整标识:
module TenantReferenceAdmin extend ActiveSupport::Concern included do rails_admin do list do joins tenant: :user field :tenant do filterable true queryable true # 直接指定表名+字段名 searchable ["users.first_name", "users.last_name"] end ...
修改后生成的SQL会自动把WHERE条件中的tenants.first_name替换为users.first_name,同时查询会新增users表的关联逻辑,就能正常执行搜索。
注:之前Tenant模型default_scope里的eager_load配置不生效,是因为Rails Admin构造搜索查询时会自定义关联逻辑,默认不会继承模型的default_scope中的eager_load设置,必须手动在Admin配置中指定joins才能加载users表。
内容的提问来源于stack exchange,提问作者Don Giulio
相关产品推荐
相关产品推荐

