2

私は、ユーザーが異なる役割を持つことができるアプリ(例えば、売り手、バイヤー、代理店など)を構築しています。だから、私の計画はポリモーフィックな関連付けを使用し、各ロールのクラスを構築し、各インスタンスを1つのユーザーアカウントに関連付けます。それぞれのユーザーはこれらのタイプのうちの1つだけである可能性があります。その件名を読んだ後、私はSTIを使用するよりも優れていると判断しましたが、間違っていれば修正します。1つのフォームと「新しい」アクションで2つの異なるクラスの2つのオブジェクトを作成するにはどうすればよいですか?

したがって、アプリは主な種類のユーザーアカウントに対して異なるサインアップ画面を表示します。たとえば、Seller sign upフォームでは、ユーザーは自分のユーザーアカウントに必要な詳細とSellerプロファイルに固有のフィールドを記入することになります。

したがって、このフォームでユーザーオブジェクトを作成し、それに関連付けられた販売者オブジェクトを作成する必要があります。これはどうやって扱いますか?私の推測では、このフォームは売り手コントローラの「新しい」アクションに対応する必要があり、作成アクションでは、最終的に売り手を作成する前にユーザーアカウントを作成する必要があります。

これは間違いありませんか?もしそうなら、ユーザーコントローラーをSellerコントローラーから作成するか、ユーザーモデルを直接呼び出す必要がありますか?それが前者なら、私は別のコントローラから1つのコントローラをどのように呼び出すべきかわからないので、いくつかのサンプルコードを提供してください。

編集:私はマルチパートフォームを使用することも考えましたが、これはおそらくより簡単ですが、このオプションをチェックする前に決定します。

答えて

1

このようにした場合、Sellerコントローラのcreateメソッドからモデルを呼び出すといいでしょう。 UserモデルとSellerモデルの間にはどのような関係がありますか?あなたはこのような何かをする必要があると思いますので:ここ

def create 
    user = User.create(params[:user]) 
    seller = Seller.new(params[:seller]) 
    seller.user_id = user.id 
    seller.save 
    redirect_to #wherever 
end 

を私はちょうどあなたが売り手モデルでbelongs_to :userを持っていると仮定しました。それでもカンカンのような宝石や、このアプローチの代わりに役割を扱うものを考えることをお勧めします。

幸運を祈る!

+1

認可を超えても問題はありませんか? @oaloは「役割」という言葉を使っていますが、実際には「プロファイル」のように聞こえます。そうであれば、ユーザ 'belongs_to:profile、:polymorphic => true'がある' User'と 'Profile'の間に多相関連を使う理由があると思います。 – Feech

+0

真。特に、ユーザープロファイルが大きく異なる場合。 –

+0

はい、@マット、私は、はるかに正確なプロファイルを言っている必要があります。売り手と通常のユーザーのプロファイルは大きく異なり、さまざまな分野があります –

1

ネストされたフォームを使用できます。ユーザーには1つの役割があります。このレールキャストを見ることができます:http://railscasts.com/episodes/196-nested-model-form-part-1、それは入れ子になったフォームを使用する方法を説明しました。 UserとRoleを作成するときに、User Controllerを呼び出すことになります。

+0

私は@oaloと同様のアプリケーションデザインを持っていましたが、残念ながら多態的なアサーションで 'accepts_nested_attributes_for'を使うのは本当に面白そうです。 – Feech

0

私はこの質問に対して異なるアプローチをとっています。 1つの役割クラスを持つ。のようなユーザークラスのメソッドを作成します。

def can_assign_users? 
    roles.map(&:name).includes('admin') 
end 

それ以外の場合は50個のモデルがあります。さらに、このように機能する多くの宝石がありますので、それらを活用することができます。

+0

異なる役割の追加の列、メソッド、およびビューは、どうすれば処理できますか?私は2つ、最大で3つの異なるユーザータイプを持つので、私はあまりにも複雑すぎるように思えます。あなたはその場合どのような思いをしていますか? –

関連する問題