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'"