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

あなたの質問では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)

デフォルトでは、コントローラーのメソッドを公開するまで、ビューからコントローラーのメソッドにアクセスすることはできません。これを行う 1 つの方法は、 を使用することです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 に答える
0

モデルの上部でモジュールをロードすると、次のinclude ActiveMerchant::Billingことができるはずです@merchant.get_basic_personal_data

于 2012-07-16T21:19:48.287 に答える