1

私は現在、サイト固有のソーシャルネットワーキングサイトのようにいくつかの方法で機能するRubyonRailsアプリに取り組んでいます。この一環として、サイトの各ユーザーは、連絡先情報(電話番号、住所、電子メールアドレス、雇用主など)を入力できるプロファイルを持ちます。

これをモデル化するための簡単な解決策は、ユーザーが入力できる情報ごとにデータベース列を作成することです。ただし、これは恣意的で制限されているようです。さらに、ユーザーが必要な数の電話番号を入力できるようにするためには、別のデータベーステーブルと結合を追加する必要があります。

より良い解決策は、ユーザーが入力したすべての連絡先情報を行の1つのフィールドにシリアル化することだと思います。この情報に基づいてSQLクエリを調整することは決してないので、このようなソリューションの効率が低下することはありません。

理想的には、シリアル化形式としてvCardを使用したいと思います。vCardは、Web全体に連絡先情報を保存するための標準的なソリューションであり、テスト済みのソリューションを再利用することは良いことです。代替のシリアル化形式には、単純にルビーハッシュまたはYAMLをマーシャリングすることが含まれます。シリアル化の形式に関係なく、この情報の読み取りと更新をRailsのような方法でサポートすることは、実装上の大きな課題のようです。

それで、ここに質問があります:Railsアプリケーションで使用されるこのアプローチを見た人はいますか?そのようなシステムを簡単に実装できるRailsプラグインや宝石はありますか?

理想的には、acts_as_vcardをモデルオブジェクトに追加して、vcardの編集とデータベースへの保存を処理することをお勧めします。

4

2 に答える 2

1

vCardはAPIには適していますが、実際のデータベースには1対多のデザインを使用します。各人は、多くの電話番号、住所、電子メールアドレス、過去の雇用主を持つことができます。現在の雇用主の場合、1対1の関係を築くことができます。参加に対するあなたの嫌悪感は見当違いだと思います。適切なインデックスがあれば、パフォーマンスは良好です。非正規化された文字列表現を常にシリアル化および逆シリアル化する場合よりも、実装がはるかに簡単になります。考えているときに、車輪の再発明をする必要はありません。

于 2010-06-06T02:01:26.890 に答える
0

1)シリアライゼーションルートに行きたい場合、レールにはハッシュを保存するためのサポートが組み込まれています

http://api.rubyonrails.org/classes/ActiveRecord/Base.htmlから

class User < ActiveRecord::Base
    serialize :preferences
end

user = User.create(:preferences => { "background" => "black", "display" => large })
User.find(user.id).preferences # => { "background" => "black", "display" => large }

この手法を使用する場合、シリアル化されたフィールドを独自のモデル/テーブルオブジェクトに配置します。そうしないと、すべてのユーザー検索呼び出しに含まれますが、これは理想的ではありません。

class User < ActiveRecord::Base
    has_one :contact_info
end

class ContactInfo < ActiveRecord::Base
    has_many :users
    serialize :data
end

# ...
user.contact_info.data[:phone_numbers] # => ['999 999-9999', '000 000-0000']

2) または、noSql ルートに行きたい場合は、レールが mongodb をサポートしている場合、基本的に連絡先情報をユーザー モデル/ドキュメントに埋め込みます。

3)または追加のテーブルを使用するだけです。見た目ほど悪くはありません。レールの移行は、ここで要件の変更に大きく役立ちます

于 2010-06-06T02:33:27.373 に答える