0

ユーザーが毎日の請求書を追跡するための簡単なアプリを作成しています (お金を追跡する目的で)。請求書を適用できる独自のカテゴリをユーザーが定義できるようにしたいと考えています。ただし、これをモデル化し、カテゴリを一意として検証するための最良の方法を決定しようとしています。

私の最初の考えはこれでした:

class User
  include Mongoid::Document
  embeds_many :bills

  field :categories, :type => Array
end

class Bill
  include Mongoid::Document
  embeded_in :user, :inverse_of => :bills

  field :category
  index :category
end

したがって、ユーザーはカテゴリを文字列として追加でき、請求書を追加するときに、請求書に使用可能なカテゴリから選択します。

それで、いくつか質問があります:

  1. これは適切な設計のように見えますか? 実際のカテゴリ モデルを定義する必要はないと思います。これは文字通り請求書のインデックスに使用される文字列にすぎませんが、別のモデルに他の利点があるかどうかはわかりません。

  2. ユーザーモデルでvalidate_uniqueness_of :categoriesを実行するにはどうすればよいですか。このような配列アイテムでは機能しないと思いますが、間違っている可能性があります。ユーザーに同じ名前のカテゴリを作成させたくありません。これは、ユーザーに埋め込まれた別のモデルの利点かもしれませんが、必要以上に手間がかかるようです。

ユーザーが一意のカテゴリを持っていることを検証するための最良のオプションを教えてもらえますか (ただし、ユーザーは同じカテゴリを持つことができますが、明らかに気にしません。単一のユーザーの範囲内で一意です)

4

1 に答える 1

1

[アップデート]

デザインは適切なようです。Rails固有の方法で、一意性をどのように検証しますか? カテゴリを追加するときは、リストを取得して、indexOf存在しないことを確認してください。エラーが跳ね返るだけの場合。

私は Rails の専門家ではありません。軌道に乗っていないか何かあれば教えてください。


そのためのストレージ エンジンとして MongoDB が最適な選択であるかどうかはわかりません。カテゴリ テーブルで MySQL を使用することをお勧めします。

MongoDB に対するノック:

  • 非 ACID トランザクション
  • 単一サーバーの耐久性なし
  • リレーショナルではない (請求書追跡アプリケーションにはリレーショナルが必要です)
于 2010-10-12T01:09:02.577 に答える