2017-05-09 7 views
0

J'ai problème en mettant à jour l'application de Rails 4 Rails 5.0.2 Lorsque je tente J'ai cette erreur:Rails - Grape erreur de validation

/projects/tx/app/api/api_v2/validations.rb:3:in `<module:Validations>': uninitialized constant Grape::Validations::Validator (NameError) 
    from /projects/tx/app/api/api_v2/validations.rb:2:in `<module:APIv2>' 
    from /projects/tx/app/api/api_v2/validations.rb:1:in `<top (required)>' 
    from /projects/tx/app/api/api_v2/deposits.rb:1:in `require_relative' 
    from /projects/tx/app/api/api_v2/deposits.rb:1:in `<top (required)>' 

Essayez de trouver une solution pour cela, mais pas le succès du tout . Peut-être que Grape change de nom. Le code à l'intérieur validations.rb semble comme ceci:

module APIv2 
    module Validations 
    class Range < ::Grape::Validations::Validator 

     def initialize(attrs, options, required, scope) 
     @range = options 
     @required = required 
     super 
     end 

     def validate_param!(attr_name, params) 
     if (params[attr_name] || @required) && [email protected]?(params[attr_name]) 
      raise Grape::Exceptions::Validation, param: @scope.full_name(attr_name), message: "must be in range: #{@range}" 
     end 
     end 

    end 
    end 
end 

fichier deposits.rb est comme ceci:

require_relative 'validations' 

module APIv2 
    class Deposits < Grape::API 
    helpers ::APIv2::NamedParams 

    before { authenticate! } 

    desc 'Get your deposits history.' 
    params do 
     use :auth 
     optional :currency, type: String, values: Currency.all.map(&:code), desc: "Currency value contains #{Currency.all.map(&:code).join(',')}" 
     optional :limit, type: Integer, range: 1..100, default: 3, desc: "Set result limit." 
     optional :state, type: String, values: Deposit::STATES.map(&:to_s) 
    end 
    get "/deposits" do 
     deposits = current_user.deposits.limit(params[:limit]).recent 
     deposits = deposits.with_currency(params[:currency]) if params[:currency] 
     deposits = deposits.with_aasm_state(params[:state]) if params[:state].present? 

     present deposits, with: APIv2::Entities::Deposit 
    end 

    desc 'Get details of specific deposit.' 
    params do 
     use :auth 
     requires :txid 
    end 
    get "/deposit" do 
     deposit = current_user.deposits.find_by(txid: params[:txid]) 
     raise DepositByTxidNotFoundError, params[:txid] unless deposit 

     present deposit, with: APIv2::Entities::Deposit 
    end 

    desc 'Where to deposit. The address field could be empty when a new address is generating (e.g. for bitcoin), you should try again later in that case.' 
    params do 
     use :auth 
     requires :currency, type: String, values: Currency.all.map(&:code), desc: "The account to which you want to deposit. Available values: #{Currency.all.map(&:code).join(', ')}" 
    end 
    get "/deposit_address" do 
     current_user.ac(params[:currency]).payment_address.to_json 
    end 
    end 
end 
+0

Certaines versions de Gemfile: petit bijou 'raisin', '0.19.2' bijou 'raisin entité', '0.6.1' bijou « raisin fanfaronnades ',' 0.27.1 ' – Maximi

+0

Avez-vous déjà trouvé? J'ai le même problème – Totic

+0

@Totic Toujours pas, le problème persiste. – Maximi

Répondre

1

Vous pouvez trouver la raison here, et vous pouvez trouver la signature de la méthode initiale here.

changement validations.rb

module APIv2 
    module Validations 
    class Range < ::Grape::Validations::Validator 

     def initialize(attrs, options, required, scope, opts = {}) 
     @range = options 
     @required = required 
     super 
     end 

     def validate_param!(attr_name, params) 
     if (params[attr_name] || @required) && [email protected]?(params[attr_name]) 
      raise Grape::Exceptions::Validation, param: @scope.full_name(attr_name), message: "must be in range: #{@range}" 
     end 
     end 

    end 
    end 
end