NoMethodError:未定义的方法`refund_request&#39;对于#<paypal :: sdk :: rest :: datatypes :: payment>

时间:2017-05-05 00:21:56

标签: ruby-on-rails ruby paypal

rails 4.2.6 ruby 2.3.1

我正在使用Ruby PayPal SDK并已成功创建付款并保存了payment_id。我在尝试退款时收到以下错误。

NoMethodError: undefined method 'refund_request' for #<PayPal::SDK::REST::DataTypes::Payment>

  def self.refund_successful?(payment_id)
    require 'paypal-sdk-rest'
    include PayPal::SDK::REST
    include PayPal::SDK::Core::Logging
    PayPal::SDK::REST.set_config(
      :mode => "sandbox", # "sandbox" or "live"
      :client_id => ENV["paypal_client_id"],
      :client_secret => ENV["paypal_client_secret"])
    payment = Payment.find(payment_id)
    refund = payment.refund_request # <= Error occurs here.
    refund = payment.refund_request({}) # <= Also tried this.
    if refund.success?
      return true
    else
      return false
    end
  end

我没有在refund_request方法中添加任何参数,因为退款金额是&#34; Full&#34;金额而不是&#34;部分&#34;。虽然,仅出于测试目的,我添加了amount并仍然收到相同的错误。

这就是我从PayPal那里得到的:

https://github.com/paypal/PayPal-Ruby-SDK/blob/master/samples/sale/refund.rb

1 个答案:

答案 0 :(得分:0)

这是一个班级内的方法吗?如果是这样,请记住,当使用self.method_name定义方法时,它被视为类常量,不能在实例化类上调用。

例如

class HelloWorld
  def self.foo
    puts "Hello World!"
  end

  def bar
    puts "Hello World!"
  end
end

方法foo只能按以下方式调用

HelloWorld.foo

方法bar只能通过首先实例化类然后调用方法来调用。例如,

hello_world = HelloWorld.new
hello_world.bar