Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
2 of 7 tasks
Ivanov-Anton opened this issue Jun 21, 2023 · 3 comments

Comments

@Ivanov-Anton
Copy link

Ivanov-Anton commented Jun 21, 2023

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

@Ivanov-Anton Ivanov-Anton changed the title sort by countrythat is related to resource not directly but through third relation is not work properly sort by country that is related to resource not directly but through third relation is not work properly Jun 21, 2023
@Ivanov-Anton Ivanov-Anton changed the title sort by country that is related to resource not directly but through third relation is not work properly sort by country that is related to resource not directly but through the third relation is not work properly Jun 21, 2023
@johnnymo87
Copy link

In the 0.9 version of the gem, the sorting on relationships only works for belongs_to relationships. I believe this is the actual bug here.

@Ivanov-Anton
Copy link
Author

@johnnymo87 Yeah correct. I'll try to improve this method to fix this in release-0-9 branch

@baranyeni
Copy link

As a workaround I plucked the ids from the query results and generated another query like this Model.where(id: ids) by so, sorting is possible since there are no relations etc. and it works even I don't like how it performs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants