4

複数の役割を持つRailsアプリケーションを構築しています。各ロールには非常に異なるプロパティと動作があるため、ユーザーモデルに対して継承を使用することはできません(つまり、ログインするとページへのアクセスと機能が異なります)。そこで、役割ごとに個別のモデルを構築することにしました(つまり、顧客、サービスプロバイダー、顧客担当者など)。

このための協会はどのように機能しますか?私は次のことを思いついたが、Roleクラスは私には悪いように見える。ユーザーが複数のロールを持つことができればそれほど悪くはありませんが、ロールは1つしかないため、ロールにカスタム検証を記述して、1つのロールのみが選択されていることを確認する必要があります。皆さんはどう思いますか?

class User < ActiveRecord::Base
  has_one :role
end

class Role < ActiveRecord::Base
  has_one :customer
  has_one :service_provider
  has_one :customer_representative
end

class Customer < ActiveRecord::Base
end

class ServiceProvider < ActiveRecord::Base
end

class CustomerRepresentative < ActiveRecord::Base
end
4

1 に答える 1

5

ここでの問題はあなたの「ロール」モデルにあると思います。役割は実際には物理的なものではなく、他のオブジェクトが準拠する必要のあるインターフェイスです。したがって、その多態的な関係。

class User < ActiveRecord::Base
  belongs_to :role, polymorphic: true
end

class Customer < ActiveRecord::Base
  has_one :user, as: :role
end

class ServiceProvider < ActiveRecord::Base
  has_one :user, as: :role
end

class CustomerRepresentative < ActiveRecord::Base
  has_one :user, as: role
end

role_id次に、とrole_typeをユーザーテーブルに追加する必要があります。

これはあなたが私が信じたいものを手に入れるはずです。

ジョー

于 2012-08-07T21:36:39.927 に答える