2

编辑

对不起,那没有发布所有

我的控制器:

   def get_basic_personal_data merchant
     access_token = merchant.ppp_access_token
     verifier = merchant.ppp_access_token_verifier
     ::PAYPAL_PERMISSIONS_GATEWAY.get_basic_personal_data(access_token, verifier)
   end

我有模块:

 module ActiveMerchant #:nodoc:
  module Billing #:nodoc:
   class PaypalPermissionsGateway < ActiveMerchant::Billing::Gateway # :nodoc
  ...
   def get_basic_personal_data
...
end

我需要使用这种方法从PayPal获取数据,所以我需要将它包含到merchant_controller中,但我不知道如何。

我想在视图中使用类似:

   <%=  @merchant.get_basic_personal_data.email%>

但我不断收到错误:

      undefined method `get_basic_personal_data' for #<Merchant:0x618ea78>

编辑

来自完整跟踪的错误:

  activemodel (3.2.3) lib/active_model/attribute_methods.rb:407:in `method_missing'
 activerecord (3.2.3) lib/active_record/attribute_methods.rb:148:in `method_missing'

我该做什么 ?

4

3 回答 3

0

您需要PaypalPermissionGateway在模块定义后尝试添加以下行来混合模块:

PaypalPermissionGateway.send(:include, ActiveMerchant)

您可能需要更改类名,以包括其命名空间。

于 2012-07-17T09:52:17.173 回答
0

在您的模型顶部加载模块,include ActiveMerchant::Billing然后您应该能够执行@merchant.get_basic_personal_data.

于 2012-07-16T21:19:48.287 回答
0

在您的问题中,您已经get_basic_personal_data在控制器上定义了您的方法,但您正试图从您的@merchant实例中调用它。但是get_basic_personal_data没有在您的Merchant模型上定义,也不能这样称呼。你的所作所为相当于如下:

class A
end

class B
  def method_b
    ...
  end
end

a = new A()
a.method_b()

即,它不会工作。

根据您对代码的布局方式,您应该执行以下操作:

get_basic_personal_data(@merchant)

默认情况下,您将无法从视图中访问控制器的方法,直到您公开它们。一种方法是使用helper_method. 例如:

class MerchantsController < ApplicationController
  helper_method :get_basic_personal_data

  ...

  def get_basic_personal_data merchant
    ...
  end
end
于 2012-07-17T21:26:34.950 回答