Рельсы, использующие условие поиска переменной

#ruby-on-rails #find #conditional-statements #braintree

#ruby-on-rails #Найти #условные операторы #braintree

Вопрос:

Я использую 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 и извлекать только активные адреса.

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

Ответ №1:

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

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

Ответ №2:

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

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

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

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

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