我正在使用Rails 3應用程序中的GoCardless API。我有一個訂閱模型,其中有一個與遠程記錄的id匹配的resource_id列。在Rails中將API數據與本地數據結合起來
我想從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 documentation您可以使用下面的查找訂閱:
GoCardless::Subscription.find("XXXXXXXXXX") # => #<GoCardless::Subscription ...>
所以,我的問題。如何將當前訂閱resource_id傳遞給API,以便我可以查看每個本地訂閱記錄的next_internal_start值?
更新
用亞當的例子下面我從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
更新兩個
作爲調用的第一個結果之前使用作品亞當的方法:
<%= subscription.gc_subscription.first.amount %>
這將返回2.5這是第一個簽約的價值。
我只是補充說,與大量的訂閱,這將是非常緩慢。更高效的是通過對API的單個請求來檢索所有數據。 – RocketR
謝謝Adam。我仍然有點困惑。我已將該方法添加到訂閱模型中,並從控制器中刪除了GC邏輯。在索引視圖中,我有'<%@ subscriptions.each do | subscription | %>',然後調用'<%= subscription.gc_subscription.next_interval_start%>'。雖然我收到了404錯誤。我已經檢查過訂閱表只有一個有效的resource_id。我應該在控制器中有'subscription = Subscription.find(id)'嗎? – dannymcc
我認爲這可能是404,因爲我沒有設置我的商家ID。 – dannymcc