多态关联的属性的Rails别名

时间:2016-09-23 20:58:18

标签: mysql ruby-on-rails ruby activerecord polymorphism

我有一个rails应用程序,其中有多种类型的用户使用多态关联,如下所示:

用户:

class User < ActiveRecord::Base
 belongs_to :profile, :polymorphic => true
 has_many :posts
end

播放器:

class Player < ActiveRecord::Base
  has_one :user, as: :profile
end

教练:

class Coach < ActiveRecord::Base
  has_one :user, as: :profile

这些表的模式,如下所示:

User(userId: integer, username: string, created_at: datetime, updated_at: datetime, profile_id: integer, profile_type: string)

Player(playerId: integer, playerName: string, created_at: datetime, updated_at: datetime)

Coach(coachId: integer, coachName: string, created_at: datetime, updated_at: datetime)

Post(postId: integer, userId: integer, content: string ...)

播放器和教练可以编写帖子,这些帖子将使用userId添加到数据库中。这很容易,但现在我想要一个返回所有帖子的查询,以及编写它的玩家或教练的名字。或者根据这些相同的名称字段查询用户,以便能够进行名称搜索并获取userId。

由于名称列具有不同的标题,我不能只做User.profile.name,也不知道根据其“子”表的内容查询用户的任何体面方式。我不想每次都检查profile_type,然后根据它查找不同的东西。是否可以给这些字段添加别名或其他内容?无论类型如何,我该怎样做才能得到他们的字段?

1 个答案:

答案 0 :(得分:1)

查看alias_attribute

class Player < ActiveRecord::Base
  alias_attribute :name, :column_name
end