0

I have a rails app and I use gem GraphQL. The app contain this type in:

app/graphql/types/category_type.rb

module Types class CategoryType < Types::BaseObject field :id, ID, null: false field :name, String, null: false field :weight, Integer, null: false field :parent_id, Integer field :categories, [Types::CategoryType] field :shoes, [Types::ShoeType] def categories object.categories.all end def shoes() object.shoes.all end end end 

and this query in

app/graphql/types/query_type.rb

field :category, CategoryType, "Find shoes by category" do argument :name, String argument :order_by, String end def category(name:, order_by:) @category = Category.find_by(name: name) if order_by == "name" @category.shoes = @category.shoes.order(name: :asc) elsif order_by == "popularity" @category.shoes = @category.shoes.order(popularity: :asc) end @category end 

This line of code: @category.shoes = @category.shoes.order(name: :asc) does absolutely nothing. How can I query one category and have all the shoes belonging to that category ordered by my custom order option?

I have tried to do this in

app/graphql/types/category_type.rb

field :shoes, [ShoeType], null: true do argument :order_by, String, required: false end ... def shoes(order_by: nil) if order_by == "popularity" object.shoes.all.order(order: :asc) elsif order_by == "name" object.shoes.all.order(name: :asc) else object.shoes.all end end 

app/graphql/types/query_type.rb

field :category, CategoryType, "Find shoes by category" do argument :name, String end def category(name:) @category = Category.find_by(name: name) @category end 

But when I query with this:

query { category (name: "Casual") {name shoes(order_by: "popularity"){name} } } 

I get this error:

"message": "Field 'shoes' doesn't accept argument 'order_by'"

1 Answer 1

0

Ok, I found the solution! In reality what I was trying to do in the second part of the question was right, I have an error in my query, instead of writing:

query { category (name: "Casual") {name shoes(order_by: "popularity"){name} } } 

I should write:

query { category (name: "Casual") {name shoes(orderBy: "popularity"){name} } } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.