Skip to content

sort by country that is related to resource not directly but through the third relation is not work properly #1409

Description

@Ivanov-Anton

This issue is a (choose one):

  • Problem/bug report.
  • Feature request.
  • Request for support. Note: Please try to avoid submitting issues for support requests. Use Gitter instead.

Checklist before submitting:

  • I've searched for an existing issue.
  • I've asked my question on Gitter and have not received a satisfactory answer.
  • I've included a complete bug report template. This step helps us and allows us to see the bug without trying to reproduce the problem from your description. It helps you because you will frequently detect if it's a problem specific to your project.
  • The feature I'm asking for is compliant with the JSON:API spec.

Description

When making a request to a specific API endpoint with the query parameter sort=country.name, the application crashes due to an error in the sorting mechanism. The problem arises because the country relationship does not directly belong to the destination model but rather through another association. This leads to an undefined column error when attempting to perform the sorting operation.

Additional info

class Routing::Destination < ApplicationRecord
  belongs_to :network_prefix, class_name: 'System::NetworkPrefix', optional: true
  has_one :country, through: :network_prefix
end

class Api::Rest::Admin::Routing::DestinationResource < JSONAPI::Resource
  has_one :country, class_name: 'Country', force_routed: true, foreign_key_on: :related
end

class System::NetworkPrefix < ApplicationRecord
  belongs_to :country, class_name: 'System::Country', foreign_key: :country_id, optional: true
end

request that lead to 500 error
GET /destinations?sort=country.name
SELECT "class4"."destinations".* FROM "class4"."destinations"
LEFT JOIN sys.countries AS country_sorting ON country_sorting.id = class4.destinations.country_id
LEFT JOIN class4.rate_groups AS rate_group_sorting ON rate_group_sorting.id = class4.destinations.rate_group_id
ORDER BY country_sorting.name asc, rate_group_sorting.name asc LIMIT $1 OFFSET $2  [["LIMIT", 50], ["OFFSET", 0]]


Internal Server Error: PG::UndefinedColumn: ERROR:  column destinations.country_id does not exist
LINE 1: ...ntries AS country_sorting ON country_sorting.id = class4.des...
                                                             ^

jsonapi-resource version 0.9.12

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions