레일즈 3 애플리케이션에서 GoCardless API로 작업하고 있습니다. 원격 레코드의 ID와 일치하는 resource_id 열이있는 구독 모델이 있습니다.레일스에서 로컬 데이터와 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 ...>
그래서, 내 질문에. 로컬 구독 레코드 각각에 대해 next_internal_start 값을 볼 수 있도록 현재 구독 resource_id를 API에 전달하려면 어떻게해야합니까?
업데이트
내가 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에서 사용 가능한지 확인했습니다.
<%= subscription.gc_subscription.first.amount %>
이 처음 가입의 값을 2.5를 반환 첫 번째 결과를 호출하기 전에으로 https://sandbox.gocardless.com/docs/api_guide#resources-available
업데이트 두
아담의 방법을 사용하여 작동합니다.
많은 구독으로 추가하면 꽤 느려질 것입니다. 단일 요청으로 API에 모든 데이터를 검색하는 것이 더 효율적입니다. – RocketR
감사합니다. Adam. 나는 아직도 조금 혼란 스럽다. 구독 모델에이 메서드를 추가하고 GC 논리를 컨트롤러에서 제거했습니다. 인덱스보기에서 나는 <% @ subscriptions.each do | subscription | %>'를 호출 한 다음'<% = subscription.gc_subscription.next_interval_start %>'를 호출합니다. 하지만 404 오류가 발생합니다. 구독 테이블에 유효한 resource_id가 하나만 있는지 확인했습니다. 컨트롤러에'subscription = Subscription.find (id)'가 있어야합니까? – dannymcc
가맹점 ID를 설정하지 않았기 때문에 404 일 수 있다고 생각합니다. – dannymcc