如果我有一個多態belongs_to
,我應該如何爲每個可能的關聯添加名稱/屬性?默認belongs_to多態名稱
比方說,我有一個Task
這是taskable
爲user
和project
,是否有可能以簡單的方式來創建@task.project
和@task.user
?
他們中的一個將返回關聯,另一個nil
..
如果我有一個多態belongs_to
,我應該如何爲每個可能的關聯添加名稱/屬性?默認belongs_to多態名稱
比方說,我有一個Task
這是taskable
爲user
和project
,是否有可能以簡單的方式來創建@task.project
和@task.user
?
他們中的一個將返回關聯,另一個nil
..
首先 - 這是壞主意。 你已經選擇了多態,爲什麼你需要類似的東西? @ project.task/@ user.task應該足夠了。
但作爲hackish的解決方案類似的東西就足夠了:
def comment
attachable if attachable_type.eql?("Comment")
end
因此,在我的CanCan'ability.rb'中,我可以說'@ task.user.eql?(user)'而不是'@ task.taskable.eql? (用戶)'。你提供的方法可能只是'def評論;如果attachchable_type.eql?(「評論」); end'。但是我想知道是否有一個更簡單的解決方案,當關聯類型的數量會增長時。 –
另外,我可以通過'@ task.project.present?'發現簡單的,如果它是某個模型的孩子,而不是'@ task.taskable_type.eql?(「Project」)''一直沒有我想象的那麼糟糕,無論如何,只是想知道.. :) –
如果它適合你,爲什麼不?我從來沒有發現或知道的關係,這將適合您的需求在這裏,所以'把它或離開':) 這個小方法不是太糟糕了,無論如何,它是'乾淨'夠了。 –
請問你的任務必須屬於一個用戶,並在同一時間的一個項目?或者只是一個或另一個? –
它總是這樣或那樣,這就是爲什麼它是多態的。 –