Рельсы, использующие переменное условие поиска - PullRequest
2 голосов
/ 22 октября 2011

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 22 октября 2011

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

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

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

Редактировать

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

1 голос
/ 22 октября 2011

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

@active_subscription_ids = @active_subscriptions.collect(&:subscription_id)
@local_active_subscriptions = LocalSubscriptionModel.find(@active_subscription_ids)
...