3

私はrailsを使用して、basecamp(および他の37のシグナルアプリ)lighthouseapp.comなどと同様に、各ビジネスに独自のアカウントとサブドメインを提供するWebアプリを構築しています。

これで、railsでサブドメインを実行する方法、さらにはsubdomain-fuプラグインについても、まともなチュートリアルがたくさんあることがわかりました。

ユーザーのメールアドレスをログインとして使用したいので、一意である必要がありますが、すべてのアカウントではなく、各アカウントで一意である必要があります。

認証にdeviseを使用しており、アカウントを表す「アカウント」モデルと、そのアカウントのユーザーを表すユーザーモデルを作成しました。Deviseはユーザーモデルで動作し、各ユーザーが一意の電子メールアドレスを持っている必要があるように見えます。

私は問題を十分に明確に述べましたか?喜んで説明させていただきます。

誰かが私を正しい方向に向けることができますか?


ティムの詳細を明確にする

  • Q:個々の企業はいくつのアカウントを持つことができますか?
  • A:個々のビジネスにはそれぞれ1つのアカウントがあります。「SpringfieldMathsgrinds」など

  • Q:サブドメインとアカウントの間には1対1の相関関係がありますか?

  • A:はい、springfield-maths-grinds.myapp.comなど

  • Q:「ユーザー」は、物理的な人物、またはアカウント内の役割に対応していますか?

  • A:これをもっとよく説明すべきだった。私は実際には2つの別々のモデルを持っています。例えば、家庭教師と学生です。各アカウントには、複数の講師と学生がいます。

ビジネス、アカウント、サブドメイン ビジネスとアカウントは事実上同じものです。いわば「ビジネスアカウント」。サブドメインを使用して各「ビジネスアカウント」にアクセスしています

ログイン、ユーザー、電子メールアドレス 個別のモデルで表される2種類のユーザーがいることを明確にする必要があります。これらは、家庭教師と学生です。これらはアプリにログインする必要があり、ユーザー名の代わりにメールアドレスをログインとして使用したいと思います。

うまくいけば、それはそれを悪化させるのではなく、物事をクリアします。

私の実際の問題は次のとおりです。誰かが「Springfieldphysicsgrinds」のビジネスアカウントを設定し、「Springfield maths grinds」の学生の1人がサインアップしようとすると、メールアドレスが原因でサインアップできなくなります。はすでに使用されており、一意である必要があります。ビジネスアカウント内で学生とチューターをスコープする方法を知りたいです。

4

2 に答える 2

1

あなたが考える必要がある2つのことがあります。データの整合性と認証。

Railsを使用すると、一意性を1つ以上の列にスコープできます。スコーピングを使用すると、アカウントごとに1つだけの制約で、データベースに複数のfoo@bar.local電子メールアドレスを含めることができます。これがどのように機能するかを示すために、対応するSQLがこれをどのように表示するかを含めました。

# Without scoping
validates :email, :uniqueness => true
SELECT 1 FROM `users` WHERE `users`.email = 'foo@bar.local'

# With scoping
validates :email, :uniqueness => true, :scope => :account_id
SELECT 1 FROM `users` WHERE `users`.account_id = 1 AND `users`.email = 'foo@bar.local'

Rails 3を使用していると仮定します。Rails2を使用している場合は、同じオプションを渡すことができますvalidates_uniqueness_of

認証には、アカウントを見つけ、ユーザーがそのアカウントに属していることを確認し、パスワードが一致することを確認する必要があります。ログインフォームをユーザーに提示すると、ユーザーがどのアカウントに対して認証を行っているかがわかります。あなたの行動はこのように見えるかもしれません。

def create
  @account = Account.find_by_subdomain(params[:subdomain])
  @user    = @account.users.find_by_email(params[:user][:email])
  if @user.authenticate(params[:user][:password])
    redirect_to dashboard_path
  else
    render :new
  end
end
于 2010-10-23T13:13:47.817 に答える
0

私はあなたが何をしているのか、そしてあなたが何を求めているのかについてもう少し明確にする必要があると思います。最初に重要なのは、使用しているパッケージではなく、要件とデータモデルを説明することです。あなたの質問では、私たちは持っています:

  • ビジネス
  • アカウント
  • サブドメイン
  • ログイン
  • ユーザー
  • メールアドレス

これらのいくつかは同じものだと思います。したがって、おそらく、これらのものがどのように組み合わされるかを概説することから始めることができます。ここにいくつかの質問があります:

  • 個々の企業はいくつのアカウントを持つことができますか?
  • サブドメインとアカウントの間に1対1の相関関係はありますか?
  • 「ユーザー」は、物理的な人物、またはアカウント内の役割に対応していますか?

これらがどのように組み合わされているかを頭の中で明確にし、これを明確にできるようになると、質問への回答が大幅に容易になります。

于 2010-10-23T13:08:24.220 に答える