JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources

has_one SQL not using LIMIT when using include

オープン
#750 コメント 3 件 リアクション 2 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Type: Bug
主要言語
Ruby
スター
2.3k
フォーク
546
PR マージ指標
30日以内にマージされた PR はありません

説明

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

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

issue に示されている 2 つのリクエストを再現し、直接リレーションと include されたリレーションで生成される SQL を比較します。include の読み込みのエントリポイントを追跡して has_one scope が適用される箇所を特定し、そのうえで include されたクエリが単一レコードの制限と順序を維持していることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rails, ruby
領域
api, backend
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。