--Edit--Wyniki kolejności railsów z wieloma złączeniami do tej samej tabeli
Chciałem uprościć to pytanie. z tym modelem struktury:
has_one :pickup_job, class_name: 'Job', source: :job
has_one :dropoff_job, class_name: 'Job', source: :job
Co chcę zrobić jest:
Package.joins(:dropoff_job, :pickup_job).order(pickup_job: {name: :desc})
To nie jest oczywiście ważna, rzeczywista składni, które powinny być wykorzystywane jest:
.order('jobs.name desc')
jednak sposób, w jaki szyny łączą się z tabelami, oznacza, że nie mogę zagwarantować, jak będzie wyglądać nazwa aliasu tabeli (jeśli w ogóle), a to spowoduje zamówienie przez dropoff_job.name
zamiast pickup_job.name
irb(main):005:0> Package.joins(:dropoff_job, :pickup_job).order('jobs.name desc').to_sql
=> "SELECT \"packages\".* FROM \"packages\" INNER JOIN \"jobs\" ON \"jobs\".\"id\" = \"packages\".\"dropoff_job_id\" INNER JOIN \"jobs\" \"pickup_jobs_packages\" ON \"pickup_jobs_packages\".\"id\" = \"packages\".\"pickup_job_id\" ORDER BY jobs.name desc"
Również nie jestem w kontroli, jak tabele są połączone, więc nie mogę zdefiniować alias tabeli.
--UPDATE--
miałem grać z starając się wyodrębnić nazwy aliasów z bieżącego zakresu korzystania coś takiego:
current_scope.join_sources.select { |j| j.left.table_name == 'locations' }
Ale nadal jestem trochę zakleszczony i czuć tak jak powinno być DUŻO prostsze rozwiązanie. Odpowiedź
--UPDATE--
fauna działa w niektórych scenariuszach, ale szukam rozwiązania, które jest nieco bardziej dynamiczna.
Problem polega na tym, że sam nie robię złączeń. Używam klejnotu o nazwie filterrific. Myślę, że musi istnieć sposób na uzyskanie nazwy aliasu z 'current_scope'? – Rick
Dałem ci nagrodę, ponieważ twoja odpowiedź jest bliższa temu, czego szukam, ale w żaden sposób nie jest idealnym rozwiązaniem, którego szukałem. – Rick