Rails с использованием условия поиска переменной

Я использую Braintree для управления подписками в моем приложении Rails.

У меня есть модель подписки, в которой хранится идентификатор клиента Braintree и идентификатор подписки.

Я хочу отфильтровать активные подписки в моей модели подписки. До сих пор у меня есть

def find_active_subscriptions
@active_subscriptions = Braintree::Subscription.search do |search|
  search.status.is "Active"
end

Но теперь я хочу использовать идентификаторы подписки в @active_subscriptions, чтобы найти все объекты в моей локальной модели подписки с одинаковыми идентификаторами подписки и поместить их в переменную, такую ​​как @local_active_subscriptions.

Причина, по которой я должен это сделать, заключается в том, чтобы использовать локальную информацию для доступа к Braintree::Address и получать только активные адреса.

Спасибо за помощь.


person NicSlim    schedule 21.10.2011    source источник


Ответы (2)


Если у вас есть @active_subscriptions, вы можете собрать все идентификаторы в массив и передать их прямо в метод find вашей локальной модели подписки. Я не знаю, какие атрибуты вы здесь используете, поэтому я просто делаю некоторые предположения:

@active_subscription_ids = @active_subscriptions.collect(&:subscription_id)
@local_active_subscriptions = LocalSubscriptionModel.find(@active_subscription_ids)
person ctcherry    schedule 21.10.2011

Я не уверен, что возвращает Braintree::Subscription.search, но если это что-то вроде ActiveRecords, не могли бы вы использовать что-то вроде:

@local_active_subscriptions = Subscription.where("id IN(?)", @active_subscriptions.map{ |act_subs| act_subs.id })

Функция .map должна поместить все идентификаторы в массив, а затем запрос ActiveRecord будет искать все подписки в вашей таблице подписок, идентификатор которых находится в этом массиве. Я не уверен в отображении на Braintree::Subscriptions; Я никогда не использовал это.

Изменить

Как сказал ctcherry, вы также можете выполнить поиск с помощью find. И я думаю, что сбор также хорош для отображения идентификаторов в массив. Вы также можете использовать @active_subscriptions.map(&:id)

person Pedro Cori    schedule 21.10.2011