3

Micheal Hartl のチュートリアルで Ruby on Rails を学んでいます。

私の Web アプリケーションでは、パブリッシャーとサブスクライバーという 2 種類のユーザーが必要です。現在、発行者リソースと購読者リソースがあります。どちらもサインイン/サインアウトにセッション リソースを使用できるようにしたいと考えています。

これを実装する方法についての方向性を探しています。パブリッシャーとサブスクライバーのリソースは、たとえば次のコードがポリモーフィズムを介して機能するように、ユーザー リソースから継承する必要がありますか?

def create
  user = User.find_by_email(params[:session][:email])
  if user && user.authenticate(params[:session][:password])
    # Sign the user in and redirect to the user's show page.
  else
    # Create an error message and re-render the signin form.
  end
end

パブリッシャーとサブスクライバーには多くの共通フィールドと異なる機能がないため、2 つの別個のリソースとしてモデル化する必要があると思いますが、セッション リソースを共有するにはどうすればよいでしょうか?

4

1 に答える 1

1

考えられる解決策の 1 つは、Userクラスをログインのみに使用し、ユーザーをポリモーフィック アソシエーションを介してパブリッシャーまたはサブスクライバーに所属させることです。次に例を示します。

class User < ActiveRecord::Base
  belongs_to :identifiable, :polymorphic => true
end

ポリモーフィック アソシエーションとは何かがわからない場合は、このチュートリアルをお読みください

このコードは次のように使用されます。

subscriber = Subscriber.find(1)
user = User.new
user.identifiable = subscriber
user.save

したがって、サブスクライバーまたはパブリッシャーは 1 人のユーザーに関連付けられ、:identifiable フィールドは別のオブジェクトとの関係 (ポリモーフィックな関係) になります。

これにより、ユーザーはこの識別可能な関連付けを使用してサブスクライバーまたはパブリッシャーにすることができ、 SessionsControllerはそれらの両方に再利用されます (およびすべての認証ロジックも、これらの他のクラスではなくユーザー内に存在するため)。

于 2012-06-04T04:35:07.237 に答える