rails_admin 搜索嵌套的 belongs_to 关联
rails_admin search through nested belongs_to association
我有一个模型:
class TenantReference < ActiveRecord::Base
include TenantReferenceAdmin
belongs_to :tenant, inverse_of: :reference
default_scope { eager_load(:tenant) }
end
和租户模型:
class Tenant < ActiveRecord::Base
default_scope { eager_load(:user) }
belongs_to :user
end
和一个用户模型:
class User < ActiveRecord::Base
has_many :tenants, :foreign_key => :user_id, class_name: 'Tenant'
end
最后是 TenantReferenceAdmin rails 管理文件:
module TenantReferenceAdmin
extend ActiveSupport::Concern
included do
rails_admin do
list do
field :tenant do
filterable true
queryable true
searchable [ :first_name, :last_name]
end
...
我想要实现的是,在 tenantreference 管理页面中,用户可以通过用户的 first_name 或 last_name 通过他们的租户参考来搜索 TenantReference 对象。
此配置生成的 postgresql 查询如下:
SELECT "tenant_references"."id" AS t0_r0, .... "tenants"."id" AS t1_r0, ......
FROM "tenant_references" LEFT OUTER JOIN "tenants" ON "tenants"."id" = "tenant_references"."tenant_id"
WHERE ((tenants.first_name ILIKE '%query%')
OR (tenants.last_name ILIKE '%query%')
ORDER BY tenant_references.id desc LIMIT 20 OFFSET 0)
这不起作用,因为 first/last_name 实际上是用户字段,而不是租户字段。
我该如何解决这个问题?
谢谢,
问题似乎是 rails 管理员仅在当前模型具有直接 link(has_many
、has_one
...) 到另一个要搜索的模型。如果相应的字段标记为 queryable true
.
,它就会加入它
所以我改变了添加到参考模型这一行:
has_one :user, through: :tenant
然后我创建了一个不可见的列表字段:
field :user do
visible false
queryable true
searchable [{User => :first_name}, {User => :last_name}]
end
可搜索,但未显示在列表中。
这已经解决了这个问题,我不认为这是理想的,因为我必须修改我的模型才能执行 rails_admin 搜索,而 rails_admin 本来可以处理这种情况无需更改代码。但现在我可以忍受这个
我有一个模型:
class TenantReference < ActiveRecord::Base
include TenantReferenceAdmin
belongs_to :tenant, inverse_of: :reference
default_scope { eager_load(:tenant) }
end
和租户模型:
class Tenant < ActiveRecord::Base
default_scope { eager_load(:user) }
belongs_to :user
end
和一个用户模型:
class User < ActiveRecord::Base
has_many :tenants, :foreign_key => :user_id, class_name: 'Tenant'
end
最后是 TenantReferenceAdmin rails 管理文件:
module TenantReferenceAdmin
extend ActiveSupport::Concern
included do
rails_admin do
list do
field :tenant do
filterable true
queryable true
searchable [ :first_name, :last_name]
end
...
我想要实现的是,在 tenantreference 管理页面中,用户可以通过用户的 first_name 或 last_name 通过他们的租户参考来搜索 TenantReference 对象。
此配置生成的 postgresql 查询如下:
SELECT "tenant_references"."id" AS t0_r0, .... "tenants"."id" AS t1_r0, ......
FROM "tenant_references" LEFT OUTER JOIN "tenants" ON "tenants"."id" = "tenant_references"."tenant_id"
WHERE ((tenants.first_name ILIKE '%query%')
OR (tenants.last_name ILIKE '%query%')
ORDER BY tenant_references.id desc LIMIT 20 OFFSET 0)
这不起作用,因为 first/last_name 实际上是用户字段,而不是租户字段。
我该如何解决这个问题?
谢谢,
问题似乎是 rails 管理员仅在当前模型具有直接 link(has_many
、has_one
...) 到另一个要搜索的模型。如果相应的字段标记为 queryable true
.
所以我改变了添加到参考模型这一行:
has_one :user, through: :tenant
然后我创建了一个不可见的列表字段:
field :user do
visible false
queryable true
searchable [{User => :first_name}, {User => :last_name}]
end
可搜索,但未显示在列表中。
这已经解决了这个问题,我不认为这是理想的,因为我必须修改我的模型才能执行 rails_admin 搜索,而 rails_admin 本来可以处理这种情况无需更改代码。但现在我可以忍受这个