2016-08-17 4 views
0

私は、書籍の売買を含むRailsアプリケーションをどのように構築するかについて議論しています。私が達成したいのは、本を購入するすべてのユーザーのために、書籍を購入したユーザーのリストがあるページがあることです。さらに、書籍を販売するすべてのユーザーに対して、書籍を販売しているユーザーのリストがあるページがあります。Ruby on Railsで製品を売買するためのインスタンスまたはモデルを作成しますか?

ユーザーが書籍を購入/販売するたびに書籍モデルを作成してインスタンスを作成する必要がありますか、ブックモデルを参照する購入モデルと販売モデルを作成する必要がありますか?

私はモジュールとミックスインについて読んだことがあり、これが良い選択肢かもしれないと感じています。どんな提案も感謝します。

答えて

0

私はユーザーとブックモデルを作成し、ユーザーを構築することは多くの書籍の関係を持っています。たとえば:

class User 
    has_many :books 
end 

class Book 
    belongs_to :user 
end 

次に、あなたは、2つの列 is_soldまたはis_boughtを作成するために、本モデルのマイグレーションを実行することができ、そして本が販売または購入されるたびごとにブール値を設定します。

特定のユーザーが購入した書籍のリストを作成する必要がある場合は、その書籍がユーザーに属していてis_sold/is_boughtがtrueであるという条件に基づいてすべての書籍を選択できます。

+0

このソリューションは、同じ本の複数のレコードで終わるのでしょうか?たとえば、売り手に「is_sold」をリンクし、購入者に「is_bought」をリンクする書籍がありますか?そして、もし誰かがあなたが買った本を売ったら、さらに2つの本の記録に終わるだろうか?私はこのアプローチを考えていませんでした。これは、本がデータモデル内で一意のオブジェクトであるという考えを排除するように見える。 OPの状況がそれとどのように混ざっているかはわかりません。その場合は – jaydel

+0

で、ユーザーとブックの間に多対多の関係を使用し、新しいスキーマを作成する必要があります。そして、is_sold/is_boughtを新しいテーブルに配置します。 – davidhu2000

+0

モデルを呼び出さないモデル、 'User'と' Book'で十分です。 – Leito

0

sales/purchaseトランザクション自体に関するメタデータをキャプチャするデータの履歴監査に興味がある場合は、users表、ブック表、およびbook_transaction表を使用します。 STIを使用して、2つのタイプのbook_transactionsを区別することができます(これにより、book_return_typeなど、さまざまなオプションが表示されます)。

STIケースでは、ミックスインとスコープが確実に実装を改善します。

STIを気にしない場合は、ただ1つのモデルを持つことができますが、この特定のケースでは、この表を活用するモデルのペアを持つことは強力です。

あなたは良い質問をしています。答えはあなたがデータで行う必要があるものと密接に結びついています。私はそのことについて限られた洞察力しか持っていません。

+0

私はbook_transactionテーブルについて考えることさえしませんでした。それは間違いなく、単一のテーブルで何が起こっているのかを確認するのに役立ちます。 – limaBEAN

+0

book_transactionsテーブルをブックテーブルから継承するテーブルにするかどうかを指定します。 – limaBEAN

+0

はい、申し訳ありませんが、シングルテーブル継承。基本的には、テーブルに 'タイプ'の列があり、自己識別のためにそのタイプに依存するさまざまなモデルの実装を持つことができます。私のちょっとした答えでは、書籍用のテーブル、ユーザー用のテーブル、次に書籍をユーザーに関連付ける別のテーブル+モデルがあります。 – jaydel

1

User、Book、Order、およびOrde​​rLineまたは同等のモデルが必要です。

お客様のサイトに掲載されている商品、現在の価格およびその他の情報が記載されています。注文は、彼が行う各購入のためのユーザのカートおよび/または請求書であり、これは多くの注文ラインを有する。本を購入した時点で、取引の時点で価格を保管しています。書籍の価格は後に変わる可能性があるので、この価格を維持することが重要です。

より複雑な設定では、注文と請求書のモデルが異なりますが、それはあなた次第です。

+0

あなたは「この価格を維持することが重要です。なぜなら、書籍価格は後に変わる可能性があるからです」それは要件に依存します。システムが書籍の交換の点で価格を気にしていないことは完全に可能です。 LibraryThingやGoodReadsなどです。現在の価格は、データとしてユーザーに提示するのは興味深いが、他の点では重要ではない。 – jaydel

+0

@jaydelまあ、通常、サイトが構築されているときに "書籍の売買を伴う"価格の問題です。それが起こると、私のコメントが適用されます。それがなければ、私はそれを売り買いと呼ぶつもりはない。 – Leito

+0

私はいつも質問に答えるだけで、自分の前提ではなく、質問に答えようとします。しかし、大したことはありません – jaydel