Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我能';t在用户实例方法中使用根路径?(未定义的局部变量或方法)_Ruby On Rails_Path_Actioncontroller - Fatal编程技术网

Ruby on rails 为什么我能';t在用户实例方法中使用根路径?(未定义的局部变量或方法)

Ruby on rails 为什么我能';t在用户实例方法中使用根路径?(未定义的局部变量或方法),ruby-on-rails,path,actioncontroller,Ruby On Rails,Path,Actioncontroller,我需要调用user的方法,它有email参数。这是支付贝宝的功能,我正在设置返回url和取消url。 以下是我在user.rb中的方法: def pay email require 'httpclient' require 'xmlsimple' clnt = HTTPClient.new credentials = { 'USER' => 'payer_1342623102_biz_api1.gmail.com', 'PWD' => '1342623141',

我需要调用user的方法,它有email参数。这是支付贝宝的功能,我正在设置返回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\u to?

我认为根路径或根url在默认情况下在模型类中是不可用的。这是出于设计,因为您的模型不应该了解控制器/视图/类似会话的操作。通过在模型中包含以下内容,您可以访问根url:

include Rails.application.routes.url_helpers

更好的解决方案是将此信息传递到order.pay方法。

您可以执行
rake routes
并检查是否在那里定义了根路径吗?我正在另一个操作中使用根路径,它是worikng。它确实存在于我的路径中。我把它放在方法中,但它给了我:未定义的方法'include'for#当我把它放在模型中时,它给了我-未定义的方法'redirect_to'@DenMed,我想你混淆了模型和控制器。你不能在模型中重定向,这是控制器的责任。重定向到是ActionController::Base的一部分,你真的不应该/不能在模型中使用它。是否有一种方法可以重组代码,使模型执行对paypal的调用,但控制器根据对paypal的调用结果进行重定向。我如何在控制器中获得调用方法的结果?