Когда вы определяете разрешающий метод внутри вашего определения типа, Graphql Ruby предполагает, что этот метод разрешит значение. Таким образом, в то время как ваш текущий метод def height(unit: nil)
запущен, он не знает, каково текущее значение высоты, потому что он ожидает, что вы определите его.
Вместо этого вам нужно переместить метод разрешения в модель / объект, возвращаемый для типа Human
. Например, в рельсах вы можете сделать это:
# app/graphql/types/human_type.rb
class Types::Human < Types::BaseObject
field :id, ID, null: false
field :height, Int, null: true do
argument :unit, String, required: false
end
end
# app/models/human.rb
class Human < ApplicationRecord
def height(unit: nil)
# access to height with self[:height].
# You must use self[:height] so as to access the height property
# and not call the method you defined. Note: This overrides the
# getter for height.
end
end
GraphQL Ruby затем вызовет .height
в случае экземпляра человека, который ему передан.