2016-09-23 39 views
1

我那裏有使用多態關聯的多種類型用戶的Rails應用程序,就像這樣: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 ...) 

球員和教練可以寫帖子,這將被添加到他們的用戶id數據庫。這很容易,但現在我想要一個返回所有帖子的查詢,以及寫它的玩家或教練的名字。或者根據這些相同的名稱字段查詢用戶,以便能夠進行名稱搜索並獲取userId。

由於名稱列具有不同的標題,因此我不能僅僅執行User.profile.name,也不知道根據其「子」表的內容來查詢用戶的任何體面的方式。我不想每次都檢查profile_type,然後根據它查找不同的東西。是否有可能給這些領域別名或什麼?我可以做什麼來獲得他們的領域,無論類型?

回答

1

看看alias_attribute

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

這似乎很有用,謝謝。但是,如果我使用相同的別名命名'coachName'和'playerName',我可以使用別名進行查詢,它會將它們視爲相同嗎?我如何使用它來尋找類似'給我所有用戶的profile.name =「xx」'? –

+0

@ChibiCanton你有工作嗎? –

+0

我想這已經夠好了,最終得到了我想要的結果。接受答案,謝謝! –