![](/img/trans.png)
[英]Using rails_admin to display dropdown list on belongs_to association
[英]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 实际上是用户的字段,而不是租户的字段。
我怎么能解决这个问题?
谢谢,
问题似乎是,如果当前模型具有到另一个模型的直接链接( has_many
, has_one
...),则 rails admin 仅将JOIN
添加到查询中以进行搜索。如果相应的字段被标记为queryable true
,则它会加入它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 可以在不更改代码的情况下处理这种情况。 但现在我可以忍受这个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.