[英]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.