1

Ruby on Railsプログラミングの改善に役立つ小さなプロジェクトを提供しました。これまでのところ、私は完全なユーザーのサインアップとパスワードリセット、覚えている機能と通知の電子メールで認証を完了しました。私は何が起こっているか完全に理解しています。Ruby on Railsで複数のデータベーステーブルを効率的に操作する方法

私はユーザーアカウント領域に移動し、ユーザーが自分のプロファイルを編集するページをコーディングしたいと考えています。登録フォームでは、ユーザー名、電子メール、パスワードを尋ねたところで、簡単に登録したいと思っていました。それは私 個人的な統計 についての彼らのプロフィール のURLを持つことになります

最初の名前 姓誕生 場所 の 日:ユーザーが自分のプロファイル情報を編集するページの場合、それは次のようなもののためにそれらを聞いてきますfavoyriteもの ステータスなど とその写真

彼らはこの情報を即座に更新または変更できるはずです。実際のプロフィールページでは、プロフィールの内容についてこの情報を取得します。

これを行うために別のテーブルを作成するのが最善であると思っていました。プロフィール?または、この情報の一部をデータベースのusersテーブルに保存することをお勧めしますか?

後に、私は設定ページのように多くのページを追加する必要がありますので、私はこれを行うにはクリーンな方法を把握しようとしているなど

これは私が複数で作業することがあります初めてですテーブルと私はそれを行う方法を考えているが、あまり確かではありません。どのようにこれを達成するかについての簡単な説明など、アドバイスをいただければ幸いです。

よろしくお願いいたします。

+1

すべては、ドメインとクエリの要件によって異なります。 DB設計を学ぶhttp://www.db-class.org – clyfe

答えて

1

私は、主観的な状況を過度に単純化するために人々から暴力団を得るだろうと知っています。しかし時には状況を主観的にするシナリオを中心としたオープンな議論が意思決定に役立つことがあります。だから、ここに私のテイクです。

認証ピースにdeviseやそのような宝石を使用していますか?はいの場合、おそらく、その宝石の要件に従って作成されたテーブルがあります。あなたが懸念の分離を見るならば、認証+認可システムに必要なことは、あなたの既存のユーザテーブルにかなり含まれています。私は尋ねることでそれに近づくだろう - あなたのプロフィールデータ(特にそれが2つ以上のテキストフィールドである場合)をこのテーブルと結合することの利点はありますか?プロフィールやユーザー生成の永久データが、ただ1つの画像と2〜3のテキストフィールドであることが保証されていないという事実を考えると、私は特にそうは見ません。たとえば、ソーシャルネットワーキングサイトでは、プロファイルは独自の生活をとることができます。

また、サイトが離陸するとどうなりますか。写真、位置情報、およびその他のデータをプロファイルに追加/更新するアクティブなユーザーベースがある場合、認証テーブルに影響を与え始めますか?リソースの不足が発生した場合は、スタンドアロンの認証システムが最後の懸念事項となります。しかし、それがすべてのユーザーに関連している場合はそうではありません。

はい、それはあなたの特定の状況に依存しますが、上記の考えが、サイトの種類に基づいて決定が異なる理由についていくらか明確にすることを願っています。ユーザーがシステムの中心にあり、ユーザーインタラクションがプロファイルの鍵(ソーシャルネットワークなど)である場合は、2つの領域を分けておくことについて間違いなく考えてください。ユーザーのプロファイルがおそらくユーザーについて単なる1行であれば、それは大きな懸念事項ではありません。純粋に学習のためにこれをやっているのであれば、将来の課題に備えてより多くの武器を持っているので、両方の方法で試してみてください。

+0

こんにちは、ユーザー認証をゼロからコード化し、deviseを使用しませんでした。私はdennissの投稿を読むまで、別のテーブルを持つことを考えていました。 – LondonGuy

+0

あなたのメッセージを再読し、dennissの投稿は私が先に考えていたものの、プロファイルデータを拡大することができるため、認証データとプロファイルデータを分離したかった主な理由がわかりました。私のことなどについての名字、姓だけではなく、ユーザーの評価、他のユーザーからのコメント、友人やその他のものもあります。私はそのデータのいくつかを分離する必要さえするかもしれません。 – LondonGuy

+0

はい、他にも考慮すべき点があります。あなたのアプリケーションと同じようなアプリケーションで使用されているテクノロジーを見たいかもしれません。 nosqlストレージ(文書ベースのデータベース、またはcassandraなど)を使用することに決めた場合、データモデルの設計はrdbmsとは根本的に異なります。 – Tabrez

1

ユーザーのプロフィールに別のテーブルを用意する必要はありません。私は今言うので、ユーザーとプロフィールの関係は1対1の関係です。ユーザーは1つのプロファイルのみを持ちます。ユーザーが複数のプロファイルを持っていない限り、ユーザーのプロファイル用に別のテーブルが必要とは思われません。ユーザーの(オプションの)属性を格納する列をユーザー表に単純に追加することができます。

ユーザーがフォームに登録時に必要な属性を設定していない場合は、空白のままにしておくだけです。これらのオプションの属性を設定しているユーザーのために、あなたはボタンが常に更新を行うと、ユーザーの属性を保存しますinputタグ

<input value='dennis' name='user[first_name]'/> 

のvalue属性を設定することで、編集フォームにそれらを表示することができます。

+0

これは私には大変な意味があります。つまり、ユーザーのコントローラに編集メソッドと更新メソッドを入れることができます。 – LondonGuy

関連する問題