Почему я не могу использовать root_path в методе экземпляра пользователя?(Неопределенная локальная переменная или метод)

Мне нужно вызвать метод для пользователя, который имеет параметр электронной почты. Это функция для оплаты в PayPal, и я устанавливаю URL возврата и отмену URL.

Вот мой метод в user.rb:

   def pay email
require 'httpclient'
require 'xmlsimple'
clnt = HTTPClient.new
credentials = {
    'USER' => 'payer_1342623102_biz_api1.gmail.com',
   'PWD' => '1342623141',
   'SIGNATURE' => 'Ay2zwWYEoiRoHTTVv365EK8U1lNzAESedJw09MPnj0SEIENMKd6jvnKL '
 }

header =  {"X-PAYPAL-SECURITY-USERID" => "payer_1342623102_biz_api1.gmail.com",
               "X-PAYPAL-SECURITY-PASSWORD" => "1342623141",
               "X-PAYPAL-SECURITY-SIGNATURE" =>"Ay2zwWYEoiRoHTTVv365EK8U1lNzAESedJw09MPnj0SEIENMKd6jvnKL ",
               "X-PAYPAL-REQUEST-DATA-FORMAT" => "NV",
               "X-PAYPAL-RESPONSE-DATA-FORMAT" => "XML",
               "X-PAYPAL-APPLICATION-ID" =>  "APP-80W284485P519543T"
                }
data = {"actionType" => "PAY",
           "receiverList.receiver(0).email"=> email,
           "receiverList.receiver(0).amount" => "10",
           "currencyCode" => "USD",
           "cancelUrl" => root_path,
           "returnUrl" => root_path,
           "requestEnvelope.errorLanguage" => "en_US"}
uri = "https://svcs.sandbox.paypal.com/AdaptivePayments/Pay"
res = clnt.post(uri, data, header)
@xml = XmlSimple.xml_in(res.content)
payKey = @xml["payKey"].to_s()
payKey = payKey.tr("[]", "")
payKey = payKey[1..20]
redirect_to "https://sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=#{payKey}"
 end

и я получаю ошибку:

      undefined local variable or method `root_path'

Почему я не могу использовать этот метод? И почему я не могу использовать redirect_to?

1 ответ

Решение

Я не думаю, что root_path или root_url доступны по умолчанию из класса модели. Это сделано специально, поскольку ваша модель не должна знать о действиях, подобных контроллеру / представлению / сеансу. Вы можете получить доступ к root_url, включив это в модель:

include Rails.application.routes.url_helpers

Лучшим решением было бы передать эту информацию в метод order.pay.

Другие вопросы по тегам