2016-09-23 5 views
1

ポリモーフィックな関連の属性の別名: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

私はそれが十分に良いと思って、結局私が望んだ結果を得ました。答えを受け入れる、ありがとう! –

関連する問題