2

我正在使用 Braintree 在我的 Rails 应用程序中管理订阅。

我有一个订阅模型,它存储了 Braintree 客户 ID 和订阅 ID。

我想在我的订阅模型中过滤活动订阅。到目前为止我有

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

但是现在我想使用@active_subscriptions 中的订阅ID 来查找本地订阅模型中具有相同订阅ID 的所有对象,并将其放入@local_active_subscriptions 等变量中。

我必须这样做的原因是使用本地信息来访问 Braintree::Address 并且只提取活动地址。

谢谢您的帮助。

4

2 回答 2

1

@active_subscriptions可以将所有 id 收集到一个数组中,然后将它们直接传递给find本地订阅模型的方法。我不知道你在这里使用什么属性,所以我只是做一些猜测:

@active_subscription_ids = @active_subscriptions.collect(&:subscription_id)
@local_active_subscriptions = LocalSubscriptionModel.find(@active_subscription_ids)
于 2011-10-21T21:55:09.183 回答
1

我不确定 Braintree::Subscription.search 返回什么,但如果它类似于 ActiveRecords,你可以使用类似的东西:

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

.map 函数应该将所有 ID 放入一个数组中,然后 ActiveRecord 查询将在您的订阅表中查找 ID 在该数组中的所有订阅。我不确定在 Braintree::Subscriptions 上的映射;我从来没有用过。

编辑

就像 ctcherry 说的,你也可以用 find 进行搜索。而且我猜 collect 也适合将 id 映射到数组中。你也可以使用@active_subscriptions.map(&:id)

于 2011-10-21T21:55:44.417 回答