JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources
has_one SQL not using LIMIT when using include
オープン
まだ誰も着手していません。
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
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
issue に示されている 2 つのリクエストを再現し、直接リレーションと include されたリレーションで生成される SQL を比較します。include の読み込みのエントリポイントを追跡して has_one scope が適用される箇所を特定し、そのうえで include されたクエリが単一レコードの制限と順序を維持していることを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- rails, ruby
- 領域
- api, backend
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100