2013-11-04 91 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

如果它适合你,为什么不?我从来没有发现或知道的关系,这将适合您的需求在这里,所以'把它或离开':) 这个小方法不是太糟糕了,无论如何,它是'干净'够了。 –