2013-11-04 49 views
0

如果我有一個多態belongs_to,我應該如何爲每個可能的關聯添加名稱/屬性?默認belongs_to多態名稱

比方說,我有一個Task這是taskableuserproject,是否有可能以簡單的方式來創建@task.project@task.user

他們中的一個將返回關聯,另一個nil ..

+0

請問你的任務必須屬於一個用戶,並在同一時間的一個項目?或者只是一個或另一個? –

+0

它總是這樣或那樣,這就是爲什麼它是多態的。 –

回答

0

首先 - 這是壞主意。 你已經選擇了多態,爲什麼你需要類似的東西? @ project.task/@ user.task應該足夠了。

但作爲hackish的解決方案類似的東西就足夠了:

def comment 
    attachable if attachable_type.eql?("Comment") 
end 
+0

因此,在我的CanCan'ability.rb'中,我可以說'@ task.user.eql?(user)'而不是'@ task.taskable.eql? (用戶)'。你提供的方法可能只是'def評論;如果attachchable_type.eql?(「評論」); end'。但是我想知道是否有一個更簡單的解決方案,當關聯類型的數量會增長時。 –

+0

另外,我可以通過'@ task.project.present?'發現簡單的,如果它是某個模型的孩子,而不是'@ task.taskable_type.eql?(「Project」)''一直沒有我想象的那麼糟糕,無論如何,只是想知道.. :) –

+0

如果它適合你,爲什麼不?我從來沒有發現或知道的關係,這將適合您的需求在這裏,所以'把它或離開':) 這個小方法不是太糟糕了,無論如何,它是'乾淨'夠了。 –