我有屬於項目,任務和子任務的討論(多態)。任務屬於項目,子任務屬於任務。遞歸遍歷Rails關係以查找特定父類
我有用戶通過名爲'突觸'的連接表連接到項目。如果用戶具有領導者(AKA管理員)權限,則突觸模型具有user_id,project_id和布爾型字段,稱爲:領導者信號。
對於要關閉(完成)討論的用戶,他需要成爲當前項目的負責人或需要成爲該討論的創建者。這是在討論控制器「完成」方法:
33 def finish
34 if current_user.leader? || current_user.discussions.include?(@discussion)
35 @discussion.update_attribute(:finished, true)
36 redirect_to polymorphic_path([@parent, Discussion])
37 flash[:notice] = "Discussion '#{@discussion.name}' finished"
38 else
39 flash[:alert] = 'You must be an admin to do that'
40 end
41 end
由於用戶模型中沒有領導者的屬性本身,我需要找到當前用戶和項目之間的對應突觸(至極確實有領袖布爾字段,顯示用戶是否可以結束討論)。下面是我在application_controller的方法找到突觸:
9 def find_synapse(user,project)
10 user.synapses.find_by_project_id(project)
11 end
爲了找到突觸,我需要找到項目。到目前爲止,我可以找到討論的父母,可以是項目,任務或子任務模型。
我看到它的方式,我需要通過父母迭代,而不是停止,當父母是類Project(for循環?)。這個怎麼做?這是最好的辦法嗎?順便說一句,我嘗試使用開關大小寫(當@ parent.class是任務,做到這一點,當類是項目,做到這一點),但似乎hackish,我沒有管理它無論如何工作。
謝謝。這是最好的做法呢?是不是有一個循環會做這一切? – oFca
不要以爲這裏有什麼內置的東西。 –
我知道......這種擁有產品的方法非常性感,我會繼續......只是認爲有一些方法可以用for循環來做到這一點,以避免在每個模型中定義這種方法。 – oFca