2017-04-24 36 views
0

我有以下型號:加入待辦事項以及它們在軌道完井5

class Todo 
has_many :completions 

class Project 
has_many :completions 

class Completion 
belongs_to :todo 
belongs_to :project 

(所有項目都共享同一個待辦事項)

什麼是返回所有待辦事項和匹配的最佳方法他們完成了一個給定項目的GET/projects /:id/todos? 我正在考慮迭代和設置控制器中的虛擬屬性,但必須有一個更簡單的方法?

謝謝!

回答

0

你需要使用有很多通過關聯。

class Todo 
has_many :completions 
has_many :projects, through: :completions 
scope :completed, ->{ where(completed: true) } 

class Project 
has_many :completions 
has_many :todos, through: :completions 

然後,您可以從項目中檢索所有完成的待辦事項。

project = Project.find_by(id: params[:id]) 
todos = project.todos.completed 
+0

喜!感謝您的回覆,但是這不會僅僅返回已完成的待辦事項嗎?我希望他們所有人,並完成作爲一個屬性,如果存在,否則無 – drwsy

+0

我編輯我的答案。在那裏我建議你有一個布爾屬性'完成',確定是否已完成待辦事項。 –

+0

不完全:完成應該是一個項目待辦事項是否已完成的指標。如果存在=> true(完成作爲todo的屬性),如果不是false。感謝您的幫助! – drwsy

0

做了這樣的

@todos.each do |t| 
    t.completion = Completion.where(:todo_id => t.id).where(:project_id => 1).first 
end