私はそうのような役割を持つユーザー、持っている場合:サブクラスモデル、どのようにActiveRecordモデルをスコープしますか?
class User < ApplicationRecord
class Manager < User
def after_initialize do |u|
u.role = User.roles[:manager] if u.new_record?
end
が、これは自動的に役割を果たしているとマネージャーのすべてのインスタンスを許可しますが。しかし、私がManager.all
のような電話をすると、初期化されていないので、これは私にユーザーのすべてのインスタンスを返すでしょう。Manager
予想される動作は、ロールマネージャを使用するすべてのユーザーを受け取ることです。これについてはどうすればいいですか?それでもただサブクラスを使用する場合は、管理者ロールを持つすべてのユーザー を呼び出したいとき
このルートを使うと、基本的に 'user.manager? 'のようなenumを使って得られる無料のヘルパーメソッドが失われてしまいます。 – Strawberry
ええ、ここのさまざまなソリューションはそれぞれ独自のトレードオフを持っています。 単一テーブルの継承は、同じ情報をカプセル化するが、その情報で操作するときの動作が異なる多くのクラスがある場合に適しています。 ユーザークラスが単一の役割しか持たないことがわかっている場合、ユーザークラスの列挙型はロールを示すことができます。 ユーザーが多数の役割(マネージャとスーパーバイザ)を持つことができる場合は、多人数参加型の関係を「ロール」モデルと組み合わせて実装する方が適切かもしれません。 enumによって与えられたヘルパーメソッドを取得するには、それらを自分で記述することができます。 – brendandeere