【问题标题】:Default belongs_to polymorphic names默认的 belongs_to 多态名称
【发布时间】:2013-11-04 20:39:31
【问题描述】:

如果我有一个多态 belongs_to,我应该如何为每个可能的关联添加名称/属性?

假设我有一个Task,即taskable,用于userproject,是否可以通过简单的方式创建@task.project@task.user

其中一个将返回关联,另一个将返回nil..

【问题讨论】:

  • 你的任务需要同时属于一个用户和一个项目吗?还是只是其中之一?
  • 它总是一个或另一个,这就是为什么它是多态的..

标签: ruby-on-rails polymorphism


【解决方案1】:

首先 - 这是个坏主意。 你已经选择了多态,为什么你需要这样的东西? @project.task / @user.task 应该足够了。

但作为骇人听闻的解决方案,这样的解决方案就足够了:

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

【讨论】:

  • 所以在我的 CanCan ability.rb 中,我只能说 @task.user.eql?(user) 而不是 @task.taskable.eql?(user)。您提供的方法可能只是def comment; attachable if attachable_type.eql?("Comment"); end。但我想知道是否有更简单的解决方案来解决关联类型的数量何时会增长..
  • 另外,我可以很容易地通过@task.project.present? 找出它是否是某个模特的孩子,而不是一直做@task.taskable_type.eql?("Project")。这并不像我现在想的那么糟糕,我看到它..无论如何,只是想知道.. :)
  • 如果它适合你,为什么不呢?我从来没有在这里找到或知道哪种关系适合您的需求,所以“要么接受要么离开”:) 这个小方法无论如何也不错,它足够“干净”。
猜你喜欢
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多