JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources

has_one SQL not using LIMIT when using include

Offen
#750 3 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Type: Bug
Vorherrschende Sprache
Ruby
Sterne
2.3k
Forks
546
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I have the following model:

class Foo < ActiveRecord::Base
  has_many :messages
  has_one :last_message, -> { order(created_at: :desc) }, class_name: 'Message'
end

and following resource:

class FooResource < JSONAPI::Resource
  has_one :last_message, class_name: 'Message'
end

When I request /foo/1/last-message it generates the following SQL:

SELECT  `messages`.* FROM `messages` WHERE `messages`.`foo_id` = 1  ORDER BY `messages`.`created_at` DESC LIMIT 1

But when I request /foo/1?include=last-message, the SQL doesnt append LIMIT

SELECT `messages`.* FROM `messages` WHERE `messages`.`foo_id` IN (1)  ORDER BY `messages`.`created_at` DESC

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere die beiden im Issue gezeigten Anfragen und vergleiche das generierte SQL für die direkte Beziehung und die inkludierte Beziehung. Verfolge den Einstiegspunkt zum Laden des include, um herauszufinden, wo der has_one-Scope angewendet wird, und überprüfe anschließend, dass die Abfrage für die inkludierte Beziehung das Limit auf einen einzelnen Datensatz und die Sortierung beibehält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rails, ruby
Bereich
api, backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.