まず、いくつかの背景。
私のアプリケーションモデルは次のようなものです:
User has_many :subscriptions; has_many :courses, :through => :subscriptions
Subscription belongs_to :course, :user
Course has_many :subscriptions; has_many :users, :through => :subscriptions
サブスクリプションは、状態 (:アクティブ、:非アクティブ、:失敗、:合格、:未払い) などの情報を格納するために使用される結合テーブルであり、コースの受講に伴うすべての情報 (グレードなど) へのコネクタとしても機能します。モデル (まだ追加されていません)、支払いモデル (進行中の作業) など)。
支払いモデルを追加して、サブスクリプションの支払い履歴を保存したいと考えています。各支払いは、1 つまたは複数のサブスクリプションに対して行うことができます。これまでのところ、私は を試しましたPayment has_many :subscriptions
が、コントローラーのロジックに問題があり、「サブスクリプションのユーザーからコースへの支払い」のモデルを関連付けるより良い方法があるのではないかと考えています。
技術的に言えば、支払いショー アクションでは、これらの各モデル (course.name、支払ったユーザーの user_id、payment.amount、これらはすべてサブスクリプションに関連付けられています) からの情報と、Payment.create アクションでの情報が必要です。サブスクリプションの状態を設定する必要があります (私ができることです)。
これがさまざまなモデルを関連付ける論理的/効率的な方法である場合、Payment show アクションで必要な情報 (各モデル コース、ユーザー、支払い、サブスクリプションからの情報) に最小限のデータベース呼び出しでアクセスするにはどうすればよいですか? 私は使用してRails 3.2/Ruby 1.9
おり、単純な sql ステートメントの代わりに ActiveRecord/ARel を使用したいと考えています。「あなたは間違っている」という答えも受け入れます。アソシエーションを変更すると、コントローラーからテーブルへのアクセスがより効率的になる場合は、それも受け入れます。