如果我有一个多态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”)''一直没有我想象的那么糟糕,无论如何,只是想知道.. :) –
如果它适合你,为什么不?我从来没有发现或知道的关系,这将适合您的需求在这里,所以'把它或离开':) 这个小方法不是太糟糕了,无论如何,它是'干净'够了。 –
请问你的任务必须属于一个用户,并在同一时间的一个项目?或者只是一个或另一个? –
它总是这样或那样,这就是为什么它是多态的。 –