如何从复杂的模块中包含类(paypal_permissions gem)?

时间:2012-07-16 12:18:31

标签: ruby-on-rails module paypal

EDITD

对不起,没有发布所有内容

我的控制器:

   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'

我应该做什么?

3 个答案:

答案 0 :(得分:0)

在模型顶部使用include ActiveMerchant::Billing加载模块,然后您应该可以执行@merchant.get_basic_personal_data

答案 1 :(得分:0)

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

PaypalPermissionGateway.send(:include, ActiveMerchant)

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

答案 2 :(得分: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 。 E.g:

{{1}}