【发布时间】:2012-11-16 21:09:19
【问题描述】:
我正在我的 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 documentation,您可以使用以下方式查找订阅:
GoCardless::Subscription.find("XXXXXXXXXX") # => #<GoCardless::Subscription ...>
所以,我的问题。如何将当前订阅 resource_id 传递给 API,以便查看每个本地订阅记录的 next_internal_start 值?
更新
使用下面的 Adam 示例,我从 GoCardless 收到 404 响应。我认为这是由于我没有在请求中设置商家 ID。当我将方法更改为:
def gc_subscription
@gc_subscription ||= GoCardless::Merchant.find("MERCHANTID").subscriptions.find(self.resource_id)
end
对于我尝试使用以下代码请求的任何属性,我得到undefined methodinterval' for #`:
<% 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
更新二
与调用第一个结果之前一样,使用 Adam 的方法:
<%= subscription.gc_subscription.first.amount %>
这将返回 2.5,这是第一个订阅的值。
【问题讨论】:
标签: ruby-on-rails-3 api controller record