0

モデルを次のように構造化する方法を考え出すのに問題があります。

私は Devise を通じてユーザーを持っています - ユーザーは (特に) セールス、管理者、クライアントの役割を持つことができます。これは、Role モデルを使用して HABTM を介して設定されます。メソッドをセットアップしたので、次のことができます

user.is? :Client

必要なものは次のとおりです。

  • 販売の役割を持つユーザーは、任意の数のクライアントを持つことができます。

そのため、SalesPerson がログオンすると、User.clients を実行して、関連するすべてのクライアントを取得できます。

  • クライアントの役割を持つユーザーは、クライアントを 1 つだけ持つことができます。

新しいクライアントがオンラインでサインアップすると、デバイスを介してユーザーを作成し、作成したユーザーにリンクされたネストされた値を介してクライアントを作成したいと考えています。

  • User モデルを使用して、クライアントには 1 つの SalesAgent が必要です。

クライアントを表示すると、SalesAgent を選択するためのドロップダウンが表示されるはずです。これは、上記のように User モデルを使用する必要があります。

  • クライアントは、User クラスを使用して、Client の役割を持つ Devise User を 1 つだけ持つ必要があります。

クライアントは、devise を介してログオンして、詳細にアクセスしたり、注文を追跡したりできる必要があります。

ご覧のとおり、これは信じられないほど混乱を招くものであり、これを実現する最善の方法が何であるかはわかりません。私が考えることができる唯一のことは、ユーザーとクライアントの間で HABTM を使用し、それを機能させるためにフォームに参加してハックすることです。これを行うより良い方法はありますか?私はおそらく使用して見てきました

has_one :sales_agent, :class_name => "User"

しかし、それを機能させることはできません。:/

4

1 に答える 1

1

独自の単一テーブル継承スキームでUserクラスをオーバーロードするよりも、データベース内のロールを分割する方がよい場合がよくあります。この段階で確実に物事が明確になり、どのユーザーにも属していないクライアントまたは販売代理店に固有のデータを保存するためのより良い方法です。例えば:

class User < ActiveRecord::Base
  has_many :clients
  has_many :sales_agents
end

class Client < ActiveRecord::Base
  belongs_to :user
  belongs_to :sales_agent
end

class SalesAgent < ActiveRecord::Base
  belongs_to :user
  has_many :clients
end
于 2012-12-17T14:26:03.747 に答える