簡體   English   中英

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 實際上是用戶的字段,而不是租戶的字段。

我怎么能解決這個問題?

謝謝,

問題似乎是,如果當前模型具有到另一個模型的直接鏈接( has_manyhas_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM