Rails 3 アプリケーションで GoCardless API を使用しています。リモート レコードの ID と一致する resource_id 列を持つサブスクリプション モデルがあります。
API からローカル サブスクリプション レコードの追加情報を取得しようとしています。
サブスクリプション インデックス ビュー
<% @subscriptions.each do |subscription| %>
<tr>
<td><%= subscription.resource_id %></td>
<td><%= subscription.resource_type %></td>
<td><%= subscription.signature %></td>
<td><%= subscription.state %></td>
<td><%= @gocardless.next_interval_start %></td>
<td><%= link_to 'Show', subscription %></td>
<td><%= link_to 'Edit', edit_subscription_path(subscription) %></td>
<td><%= link_to 'Destroy', subscription, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
サブスクリプション コントローラー
def index
@subscriptions = Subscription.all
@gocardless = GoCardless::Merchant.find("XXXXXXXXXX").subscriptions
respond_to do |format|
format.html # index.html.erb
format.json { render json: @subscriptions }
end
end
ご覧のとおり、次の行を使用して次の間隔の開始日を取得しています
<%= @gocardless.next_interval_start %>
これは機能せず、nil を返します。ただし、次のように変更すると、すべてのレコードに API の最初のレコードの値が表示されます。
<%= @gocardless.first.next_interval_start %>
GoCardless API のドキュメントによると、次を使用してサブスクリプションを検索できます。
GoCardless::Subscription.find("XXXXXXXXXX") # => #<GoCardless::Subscription ...>
それで、私の質問です。各ローカル サブスクリプション レコードの next_internal_start 値を表示できるように、現在のサブスクリプション resource_id を API に渡すにはどうすればよいですか?
アップデート
以下の Adam の例を使用すると、GoCardless から 404 応答が返されます。リクエストにマーチャントIDを設定していないことが原因だと思います。メソッドを次のように変更すると:
def gc_subscription
@gc_subscription ||= GoCardless::Merchant.find("MERCHANTID").subscriptions.find(self.resource_id)
end
undefined method
次のコードを使用して、試して要求するすべての属性の #` の間隔を取得します。
<% for subscription in @subscriptions %>
<%= subscription.gc_subscription.amount
<% end %>
同じコードを使用してローカル コンテンツを取得すると、期待どおりに動作します。
<% for subscription in @subscriptions %>
<%= subscription.resource_id %>
<% end %>
取得しようとしている値が API で使用できることを確認しました。https://sandbox.gocardless.com/docs/api_guide#resources-available
アップデート 2
最初の結果を呼び出す前と同様に、Adam の方法を使用して動作します。
<%= subscription.gc_subscription.first.amount %>
これは、最初のサブスクリプションの値である 2.5 を返します。