2

これがすでに回答されている場合はご容赦ください。しかし、私はたくさん検索しましたが、まだ説明が必要です。

Rails 3.2 を使用してプロパティ管理ツールを構築しています。私はすでに User モデルと承認/認証コードを用意しており、テストを完全にカバーしています。

モデル/クラス/テーブルを描き始めたばかりで、少し混乱しています。

ユーザーから始めましょう。

ユーザーのモデル化

複数の企業にこのシステムを利用してもらう予定です。それぞれに従業員 (ユーザー) がいます。これらのユーザーには、マネージャー、エージェント、会計士、秘書などのさまざまな役割があります。ほとんどの場合、これらのユーザーごとに保存する予定のデータは似ているため (または、現時点ではそう思います)、単一テーブルに傾いています。継承と型を使用して、各従業員が持つアクセスのレベルを定義します。

次に、家主とテナントもシステムにログインできるようにする予定です。ログインすると、所有または賃貸している物件に関する情報を表示できます。連絡先の詳細も最新の状態に保つことができます。

これらのユーザーを表現するために多態的な関連付けを使用することを考えていました。

ですから、私が現時点で持っている計画で、フィードバックが欲しいのは、

ユーザー < ActiveRecord::BASE

従業員 < ユーザー (これには STI タイプの列があり、さまざまな従業員の役割が許可されます)

家主 < ユーザー

テナント < ユーザー

これはこの問題に取り組む最善の方法ですか、それとも私は自分自身を撃っていますか?

「ロール」テーブルを用意してユーザーにロールを割り当てる必要があるとアドバイスする人もいますが、これは Rails でこれを行う最もエレガントな方法ではないと感じています。

プロパティ

私の次の問題はプロパティです。現在、プロパティのモデルがあり、それらを追加すると、それらは User に属する (つまり、user_id 外部キーを持っている)。そこで「プロパティを追加した従業員(ユーザー)が退職したり、何らかの理由でアカウントを削除したりしたらどうなるのだろう?」と考えるようになりました。

したがって、このシナリオでは、ユーザー/従業員とプロパティの関連付けをやめて、従業員が所属する会社にプロパティをリンクするだけでよいのでしょうか? このようにして、すべての employee.company.properties をすべてのプロパティを一覧表示できますか?

家主とテナントの協会

プロパティを会社に所属させると仮定しましょう。

連想に関しては、これが私の頭の中にあるものです。今見てみると、システムを使用しているある会社が別の会社の家主/テナント/従業員/財産を見ることができないため、すべてが会社に属していることがわかります。

class Landlord < User
  belongs_to :company
  has_many :properties, :through => :ownerships
end

class Tenant < User
  belongs_to :company
  has_one :property, :through => tenancies #you can only live at one place at a time right?
end

class Property < ActiveRecord::Base
  has_many :tenants, :through => :tenancies
  has_many :landlords, :through => :ownerships
  belongs_to :company
end

class Company < ActiveRecord::Base
  has_many :properties
  has_many :employees
  has_many :landlords :through => :ownerships #not sure if through is required/works here
  has_many :tenants :through => :tenancies #not sure if through is required/works here
end

class Employees < User
  belongs_to :company
end

プロパティ

また、さまざまな種類のプロパティ (商業用/住宅用) があり、それらのうち、建物全体、建物内のアパート (単一の住所) などがあると思います。

ユーザーの場合と同様に、Polymorphic Associations を使用して 2 つのサブクラス CommercialProperty と ResidentialProperty を定義し、sti を使用して型を定義することを計画しています。タイプが「マルチユニット」の場合、ユニットの新しいモデルと、プロパティが_多くのユニットを持ち、ユニットがプロパティに属するという関連付けがあります。

標的

新しい機能を追加して拡張するときに、アプリの大部分を書き直す必要がないように、コードが可能な限りベスト プラクティスに従っていることを確認しようとしています。

フィードバックをいただければ幸いです。

参照

私が読んだいくつかの投稿。うまくいけば、同じ問題を解決しようとしている他の人を助けることができます。

Rails アプリケーションの設計: 単一テーブルの継承?

さまざまなユーザー タイプの Ruby on rails

複数のタイプの Ruby On Rails ユーザー モデル

4

1 に答える 1

2

おそらく手遅れですが、has_and_belongs_to_manyonUserとを使用して、gems cancanrolifyCompanyを使用して STI を完全に回避することもできます。きめ細かいアクセス権 (能力) を定義できます。

ロールの代わりに異なるクラスを持つ方がエレガントに見えることはわかっていますが、長期的な戦略としては実行可能ではなく、ロジックが複雑になると厄介になる可能性があります。

それ以外は、残りはかなりしっかりしているようです。

于 2013-06-14T21:58:48.793 に答える