使用变量查找条件的Rails

时间:2011-10-21 21:44:17

标签: ruby-on-rails find conditional-statements braintree

我正在使用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并仅提取活动地址。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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上的映射;我从来没有用过它。

修改

像ptcherry说的那样,你也可以用find做搜索。而且我认为收集也适用于将ID映射到数组中。您也可以使用@active_subscriptions.map(&:id)