0

そのため、メンバーには多くのサブスクリプションがあります。最後のサブスクリプション cancel_at が nil でない場合、メンバーはキャンセルされます。しかし、現在キャンセルされているサブスクリプションを持つすべてのメンバーを見つけるために、クエリを正しく機能させることができないようです。

私はメンバーモデルでこれをやっています

  scope :canceled, includes(:subscriptions).
    where('subscriptions.canceled_at IS NOT NULL')

ただし、以前にサブスクリプションをキャンセルしたユーザーにも返されます。制限などを使用する必要があります。次のように定義された関係があります

has_many :subscriptions, :order => "subscriptions.created_at DESC", :dependent => :destroy

だから私は.firstから離れて作業することができますが、そのロジックをそのようなクラススコープに適用する方法がわかりません。

4

1 に答える 1

0

別の協会を追加してはどうですか

 Class Member < ActiveRecord::Base
   has_one :last_subscription, :class_name => "Subscription", :foreign_key => "member_id", :order => "created_at desc"

それから試してください

 scope :canceled, includes(:last_subscription).where('subscriptions.canceled_at IS NOT NULL')
于 2012-08-23T00:14:21.430 に答える