2014-09-22 2 views
3

한 클래스에 다른 클래스에 대한 belongs_to이 두 개 이상 연관되어있는 경우 RailsAdmin은 사용자가 두 번째 연결로 필터링하려고하면 잘못된 쿼리를 생성합니다.동일한 모델에 여러 개의 조인이있는 경우 RailsAdmin 필터가 작동하지 않습니다.

SELECT "issues"."id" AS t0_r0, "issues"."title" AS t0_r1, "issues"."description" AS t0_r2, "issues"."author_id" AS t0_r3, "issues"."assignee_id" AS t0_r4, "issues"."created_at" AS t0_r5, "issues"."updated_at" AS t0_r6, "users"."id" AS t1_r0, "users"."name" AS t1_r1, "users"."created_at" AS t1_r2, "users"."updated_at" AS t1_r3, "assignees_issues"."id" AS t2_r0, "assignees_issues"."name" AS t2_r1, "assignees_issues"."created_at" AS t2_r2, "assignees_issues"."updated_at" AS t2_r3 
FROM "issues" 
LEFT OUTER JOIN "users" ON "users"."id" = "issues"."author_id" 
LEFT OUTER JOIN "users" "assignees_issues" ON "assignees_issues"."id" = "issues"."assignee_id" 
WHERE ((LOWER(users.name) LIKE '%asdf%')) ORDER BY issues.id desc LIMIT 20 OFFSET 0 

방법 : 실용 예 : 그것은 테이블이 앨리어싱 필터 대신에 저자가되었다 모르기 때문에

class Issue < ActiveRecord::Base 
    belongs_to(:author, class_name: 'Worker', foreign_key: 'author_id', inverse_of: :authored_issues) 
    belongs_to(:assignee, class_name: 'Worker', foreign_key: 'assignee_id', inverse_of: :assigned_issues) 
end 

class Worker < ActiveRecord::Base 
    has_many(:authored_issues, class_name: 'Issue', foreign_key: 'author_id', inverse_of: :author) 
    has_many(:assigned_issues, class_name: 'Issue', foreign_key: 'assignee_id', inverse_of: :assignee) 
end 

당신이 /admin/issues에 액세스하고 SQL을 양수인 필터링하려고 생성은 잘못된 결과를 이 문제를 해결하려면? WHERE 절은 "assignees_issues".name을 사용해야합니다. ActiveRecord, RailsAdmin 또는 내 응용 프로그램의 버그입니까?

답변

3

새 별칭이 지정된 테이블 이름을 지정하려면 RailsAdmin DSL을 사용해야했습니다. 기본적으로 :

config.model 'Issue' do 
    list do 
     field :title 
     field :description 
     field :author 
     field :assignee do 
     searchable do 
      {'assignees_issues' => 'name'} 
     end 
     end 
    end 
    end 
+0

올바른 해결책입니다. RailsAdmin이 어떤 종류의 쿼리를 생성하는지 확인하고 검색 가능한 블록 테이블을 무의미한 것으로 대체하여 실제로 무엇을 변경해야하는지 판단하십시오. – corvuszero