ここに私が持っている関連があります。関連レコードが存在しない親レコードを見つけよう
award_test.rb
has_many :instructor_student_awards , :dependent => :destroy
has_many :award_test_payment_notifications, dependent: :destroy
instructor_student.rb
has_many :instructor_student_awards, :dependent => :destroy
has_many :awards, through: :instructor_student_awards
has_many :award_test_payment_notifications, dependent: :destroy
belongs_to :award
belongs_to :instructor_student
belongs_to :award_test
instructor_student_award.rb
"award_tests"
t.date "test_date"
t.time "test_time"
t.integer "award_id"
t.decimal "test_fee"
"award_test_payment_notifications"
t.text "response_params"
t.string "status"
t.string "transaction_id"
t.string "paid_by"
t.float "amount"
t.string "merchant_reference"
t.integer "award_test_id"
t.integer "instructor_student_id"
"instructor_student_awards"
t.integer "instructor_student_id"
t.integer "award_test_id"
t.boolean "is_registered", default: false
schema.rb
belongs_to :award_test
belongs_to :instructor_student
award_test_payment_notification.rbどれインストラクターの生徒が表彰テストに登録することができます。 1人のインストラクターの生徒が複数の賞のテストに登録することができます。受験生は受験者は受験料を支払う必要があります。インストラクターの生徒は2種類の方法で賞品テストを受けることができます。
オンライン
現金
インストラクターの学生がその賞のテストのために支払います。インストラクターの学生とaward_testのデータはaward_test_payment_notifications
に挿入されます。 award_test_notificationsテーブルには、学生および賞のテストに関連するすべてのフィールドがあります。
講師の生徒がその授業料を支払わなかった場合、授業料が支払われない場合、授業料支払い通知は、その授業料試験の場合に限りその条件にはなりません。
インストラクター学生1は、10,11,12のような3つの賞のテストに登録します。
インストラクターの学生1は、賞のテスト10
インストラクターの学生1は、賞のテスト11のために支払われていなかった賞のテストのためのオンライン支払ったインストラクターの学生1のための現金を支払いました。
したがって、インストラクター学生は、2つの賞テスト支払い通知を持っています 1)賞品テスト10 2)a病棟テスト12
私は2017年7月31日に2017年1月1日の間賞・テストを検索し、この3つの賞はインストラクターの学生1よりも、このフィルタ 内に属している3つのカテゴリーのリターンとなります。
現金支払い
オンライン決済
未払い
私は2日を持っていると私は2つの日付に基づいてデータをフィルタリングする必要があります。その日付はテスト日になります。私はすべての現金支払い、オンライン支払い、未払い金を区別しなければなりません。
ここで私は現金支払いとオンライン支払いを得るために何をしましたか?
current_admin_award_test = AwardTest.joins(instructor_student_awards: {:instructor_student => :award_test_payment_notifications}).where("test_date <= ? AND test_date >= ? AND instructor_student_awards.instructor_student_id IN (?) ", @endMonth.end_of_month, @startMonth.beginning_of_month, @all_instructor_student_ids)
@award_test_cash = current_admin_award_test.joins("INNER JOIN award_test_payment_notifications atn ON award_test_payment_notifications.award_test_id = award_tests.id").where("award_test_payment_notifications.paid_by = ? ","Cash").select("DISTINCT(award_tests.id), instructor_student_awards.instructor_student_id, award_test_payment_notifications.paid_by, award_tests.test_fee, award_tests.test_date")
@award_test_paid_online = current_admin_award_test.joins("INNER JOIN award_test_payment_notifications atn ON award_test_payment_notifications.award_test_id = award_tests.id").where("award_test_payment_notifications.paid_by <> ? ","Cash").select("DISTINCT(award_tests.id), instructor_student_awards.instructor_student_id, award_test_payment_notifications.paid_by, award_tests.test_fee, award_tests.test_date")
正常です。しかし、私はどのように1人のインストラクターの学生の複数の賞のテストのための無償の賞のテストのリストを取得するつもりです。
アップデート1
InstructorStudentAwardの役割は何ですか?
受講者が受験者に受験したとき。データは インストラクターの学生賞に記録されています。
そのAwardTestに支払いが記録されている場合、そのイベントは であるとみなされます。 OK?
はい。インストラクターの学生が賞を受賞した時。賞品テストのお支払い 金額に関係なく通知が記録されます。
AwardTestに登録するInstructorStudentごとにInstructorStudentAwardの関連付けが作成されていますか?
はい、あなたは正しいです。
だから、あなたが欲しいのはどのInstructorStudentAwardがAwardTestが関連 AwardTestPaymentNotification
はい
は、私はあなたが、PostgreSQLデータベース
を使用していると仮定することはできますが欠落している InstructorStudentペアのJOIN、JOIN、あるはい、I PostgreSQLデータベースを使用しています。
はい。私は自分の質問を更新し、あなたの質問に答えました。 :) – ashvin
@ashvin私はPure Railsで解決したと思う。うまくいけば、あなたはRails 5.0以上になっているでしょう! – Kingdon
いいえ、レールのバージョンは4.1.1です。 – ashvin