현재 액티브 레코드 연관이 작동하고 있지만 이와 같은 작업을보다 효율적으로 수행 할 수 있는지 궁금합니다. 기본적으로 Task라는 모델이 있습니다. 한 작업에는 한 명의 제작자가 있으며 많은 사람들에게 할당 할 수 있습니다. 사용자 모델은 User라는 Devise Model입니다. 이것은 현재의 설정이지만 사용자를 위해 모든 작업을 가져 오는 데 사용해야하는 쿼리를 작성했는지 또는 할당했는지에 관계없이 쿼리가 마음에 들지 않습니다. 여기 내 모델입니다. 현재의 설정은 페이지 매김과도 끔찍합니다. 어떤 제안?할당 된 활성 레코드 관계
class Task < ActiveRecord::Base
has_and_belongs_to_many :users
belongs_to :creator, foreign_key: 'creator_id', class_name: 'User'
end
class User < ActiveRecord::Base
has_and_belongs_to_many :assigned_tasks, class_name: 'Task'
has_many :created_tasks, foreign_key: 'creator_id', class_name: 'Task'
def tasks
(assigned_tasks.includes(project: [:client]) + created_tasks.includes(project: [:client])).uniq
end
end
그래서 basicslly 작업은 가지고있다 :
- 한 창조자 (사용자)에 할당
- 많은 사용자
솔루션
def tasks
Task.joins('LEFT JOIN tasks_users ON tasks_users.task_id = tasks.id').where('tasks_users.user_id = :user_id OR tasks.creator_id = :user_id', { user_id: id }).includes(project: [:client])
end
사용자가 소유하고 사용자에게 할당 한 모든 작업을 가져 오는 데 사용되는 방법에 대해 정확히 무엇이 마음에 들지 않는지에 대해 좀 더 통찰력을 줄 수 있습니까? 어떤 특별한 문제가 있습니까? 너무 오래 걸립니까? 너무 많은 검색어를 만드시겠습니까? – Kyril
@Kyril 네, 더 자세히 설명하지 못해 죄송합니다. 기본적으로 Kaminari에서이 두 페이지를 호출하기 때문에 까다롭게 나타납니다. (조인과 실제 작업 테이블)이 모든 작업을 수행하려면 지저분 해집니다. 'status : : open'은 태스크의'enum'입니다. –
HABTM 조인을 제거하고 실제 모델을 사용하여 'Asssignment'또는 이와 유사한 'has_many : tasks, through : assignments'태스크에 사용자를 참여시킬 수 있습니다. – Kris