很好地命名多态关系

时间:2012-04-13 08:42:11

标签: ruby-on-rails ruby-on-rails-3 coding-style polymorphic-associations

这个问题是关于多态关系的命名方式

我的数据库有三种类型的人:“公司”,“客户”和“员工”。三者中的每一个都与任务和事件以及项目存在多态关系。

根据Rails指南,这可以像(为了简洁我省略了一些类):

Person.rb
has_many :tasks, :as => :taskable
has_many :events, :as => :eventable
has_many :projects, :as => :projectable # awkward names

Task.rb
belongs_to :taskable, :polymorphic => true

These lead to the rather strange:
@person = @task.taskable

我认为以下内容会更具语法性和优雅性......它会起作用,如果是这样,官方来源是否有理由使用像projectable这样的词而不是像owner这样的词语?

Person.rb
has_many :tasks, :as => :owner
has_many :events, :as => :owner
has_many :projects, :as => :owner

Task.rb
belongs_to :owner, :polymorphic => true

This creates the elegant:
@person_1 = @task.owner
@person_2 = @project.owner

1 个答案:

答案 0 :(得分:4)

我个人尽量保持它的通用性。

所以:as => :owner对我来说更有意义。

如有疑问,我只需使用

:as => :parent

我已经在一些项目中看到过。