2

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

持っている場合は、すべてのIDを配列に収集し、それらをローカルサブスクリプションモデル@active_subscriptionsのメソッドに直接渡すことができます。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 に答える