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'
我应该做什么?
答案 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}}