사용자가 여러 프로젝트를 가질 수 있고 각 프로젝트가 여러 작업을 수행 할 수있는 다음과 같은 설정이 있습니다. 사용자는 여러 프로젝트를 좋아할 수 있습니다.레일에서 다형 모델로 데이터베이스보기 연결
class User < ActiveRecord::Base
has_many :projects
has_many :tasks, :through => :projects
has_many :favourites
has_many :favourite_projects, :through => :favourites, :source => :favourable, :source_type => "Project"
has_many :favourite_tasks, :through => :favourite_projects, :source => :tasks
...
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :tasks
has_many :favourites, :as => :favourable
...
end
class Task < ActiveRecord::Base
belongs_to :project
...
end
class Favourite < ActiveRecord::Base
belongs_to :user
belongs_to :favourable, :polymorphic => true
...
end
이 설정은 @user.favourite_tasks
들이 favourited 한 프로젝트에 대한 모든 작업을 나열 할 수 있습니다.
여기에서 (http://pivotallabs.com/database-views-performance-rails/) 제안을 취하여 가능한 경우 데이터베이스보기로 다단계 테이블 조인을 대체하려고합니다.
뷰 SQL은 다음과 같습니다
SELECT tasks.id AS task_id, ..., projects.id AS project_id, ...
FROM tasks INNER JOIN projects ON projects.id = tasks.project_id
나의 새로운 ProjectTask
모델이다 : 내 User
모델을 업데이트 한
class ProjectTask < ActiveRecord::Base
self.primary_key = 'task_id'
end
포함 : 위해 잘 작동
has_many :project_tasks
@user.project_tasks
.
그러나 즐겨 찾기가 작동하도록 모델에서 has_many/has_one/belongs_to
이 무엇인지 알아낼 수는 없습니다 (즐겨 찾기를 프로젝트 테이블이 아닌보기로 연결).
내 컨트롤러에 @user.favourite_project_tasks
을 사용하고 ProjectTask
모델 스코프를 첨부 할 수 있도록 has _many :favourite_project_tasks, :through => :favourites....
을 목표로합니다. 는 내가 ProjectTask
모델은 기본 키로 task_id
을 가지고 있다는 사실은 레일 테이블/뷰를 연결하고 :through
무시 :foreign_key
및 :primary_key
의 사용을 사용하기 때문에 (http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many에 따라)에 문제를 일으키는 생각합니다.
누군가가 기쁘지 않은 변화의 조합을 시도했기 때문에 내가 뭘해야하는지 조언 해 줄 수 있기를 바랍니다.
감사합니다.