0

「会社」のリソースがあります。ユーザーが無料アカウントにサインアップするとき、彼らは電子メールアドレスを入力するだけです。彼らが彼らのアカウントをアップグレードしたいとき、私は彼らから彼らの住所のような追加の詳細をとる必要があります。これをどのようにモデル化するのが最適ですか?

  1. 住所の詳細を会社のテーブルに保存しますか?
  2. 企業との1対1のマッピングを含む個別の「アドレス」テーブルがあり、アップグレードはアドレスの新しいアクションで行われますか?
  3. アカウントをアップグレードし、アドレス情報を取得する会社のリソースにアクションを作成しますか?
  4. 会社のテーブルに追加の住所情報を追加する「upgrade」という新しいリソースを作成しますか?

ありがとう

4

2 に答える 2

1

「プレミアム」は「会社であること/代表すること」から分離されるべきです。Company住所などに十分なフィールドがある別のモデルを使用します。

その場合、 ACompanyはに属し:user、aUserは1つになり:companyます。

adrアドレスに使用するフィールドに関するヒントが必要な場合は、microformats(http://microformats.org/wiki/adr)を参照してください。

于 2012-10-01T11:38:11.537 に答える
1

Address 用に別のモデルを持っているか、Company に保存するだけであることがわかりました。個人的には、特定のシステムでは、複数のモデルに関連付けられたアドレスを持つ可能性が高いため、別のモデルを持つことを選択するでしょう。もう 1 つの利点は、アドレス関連の責任を会社から切り離すのに役立つことです。

次のように検証を設定します。

Class Company
  has_one :address
  validates_presence_of :address, :if => :upgraded?
  validates_presence_of :email
  ...
  private

  def upgraded?
    <true if user has upgraded, else false>
  end
end
于 2012-10-01T11:44:00.573 に答える