我有以下設置允許用戶擁有多個項目,每個項目可以有多個任務。用戶可以喜歡多個項目。在rails中使用多態模型連接數據庫視圖
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
列出了他們已經收藏最多項目的所有任務。
從這裏採取建議(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
模式是:
class ProjectTask < ActiveRecord::Base
self.primary_key = 'task_id'
end
我已經更新了我User
模式,包括:
has_many :project_tasks
這對於工作正常@user.project_tasks
。
但是,我無法弄清楚has_many/has_one/belongs_to
應該在模型中的最愛工作(連接收藏夾視圖,而不是項目表)。
我的目標是has _many :favourite_project_tasks, :through => :favourites....
,以便我可以在我的控制器中使用@user.favourite_project_tasks
,並在需要時將任何ProjectTask
模型示波器附加到它。 我認爲ProjectTask
模型task_id
作爲主鍵的事實是造成問題與軌道連接的表/視圖,因爲使用:through
覆蓋任何使用:foreign_key
和:primary_key
(根據http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many)。
希望有人可以建議我應該做什麼,因爲我已經嘗試過大量的組合變化沒有喜悅。
謝謝