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をチェックし、それに応じて別のものを探す必要はありません。これらのフィールドにエイリアスなどを付けることは可能ですか?タイプに関係なくフィールドを取得するにはどうすればよいですか?
これは本当に便利ですね、ありがとう。しかし、もし私が同じエイリアスで 'coachName'と' playerName'という名前を付けると、私はエイリアスで問い合わせることができますか?どうすれば 'profile.name = "xx"'というユーザーを誰かに渡すようなことを探すことができますか? –
@ChibiCantonあなたはそれを働かせましたか? –
私はそれが十分に良いと思って、結局私が望んだ結果を得ました。答えを受け入れる、ありがとう! –