0

私は少し困惑していて、アドバイスを探しています

ユーザーがいるアプリがあり、各ユーザーには会社があり、各会社にはトランザクションが進行しています。

Company
has_many :transactions

Transaction
belongs_to :company

しかし今、ユーザー トランザクションの整理と管理を改善するために、カテゴリを含める必要があります。ユーザーに自分でカテゴリを作成してもらい、その後、作成したカテゴリに新しいトランザクションを直接追加します。トランザクションがカテゴリに属しているようなものです。そうは言っても、現在のモデルを壊す気はありません。なぜなら、それは私が望むように機能し、ちょうどいいと感じているからです (会社はトランザクションを実行します)。

私のルートはすでに十分にネストされているため、別のレイヤーを作成すると状況がさらに悪化します。これ

  resources :users do
    resources :companies, shallow: true do
      resources :transactions, shallow: true
    end
  end

の中へ

  resources :users do
    resources :companies, shallow: true do
      resources :categories, shallow: true do      
        resources :transactions, shallow: true
    end
  end
end

ここで何かアドバイスはありますか?誰かが同じようなジレンマを抱えていたのではないでしょうか?Transaction モデルに複数の belongs_to を確立する必要がありますか?それとも再構築する必要がありますか? 私の状況での最適なルーティングは何ですか? ありがとうございました。

4

3 に答える 3

1

ドメイン モデリングの肉付け (この場合はCategoryモデルの追加) と、ルート ファイルの構造化を混同してはなりません。ドメイン内のすべてのモデルにコントローラーを用意することは必須ではありません。

この場合、モデルを次のように調整したいようです。

def Company < ActiveRecord::Base
  has_many :categories
  has_many :transactions, through: :categories
end

def Category < ActiveRecord::Base
  belongs_to :company
  has_many :transactions
end

def Transaction < ActiveRecord::Base
  belongs_to :category
end

上記のモデルから「すぐに」得られないのは、トランザクションから会社への直接の関連付けです。belongs_to には :through オプションがありません。ただし、トランザクションを呼び出すと.category.company正しいモデルが得られ、必要に応じてそれをインスタンス メソッドにラップできますTransaction

もちろん、トランザクション モデル内で company_id 属性を保持し、belongs_to :company呼び出しを保持することもできます。これにより、各取引とそれを行った会社との間の直接的なリンクの利点が得られます。しかし、それは関係を正しく維持するためにあなたに余分な責任を課します. 最終的には、ビジネス要件に応じて、どのアプローチを取るかはユーザー次第です。

リソースとルートに関しては、あまり深く入れ子にする必要はありません。特に、特定のトランザクションには 1 つのカテゴリと 1 つの会社のみが存在するためです。個人的には、次のネストを選択する可能性があります (浅いオプションは省略します)。

resources :companies do
  resources :categories
  resources :transactions
end

最終的には、単純なフォームをユーザーに提供することに集中してください。これは、ルーティングへの単純なアプローチを指す傾向があります。

于 2013-11-06T11:37:11.927 に答える
0
Company
has_many :transactions

Category
has_many :transactions

Transaction
belongs_to :category
belongs_to :company

Add resources :categories out side.
于 2013-11-06T11:27:55.160 に答える