私のGroup
モデルには次の関連付けがあります。
has_many :subscriptions, :order => 'subscriptions.expiration_date DESC', :group => 'subscriptions.product_name', :conditions => ['subscriptions.status IN (?)', [:active, :canceled]]
モデル (ユーザー、サブスクリプション、グループ) は次のように分類されます。
**User**
has_many :groups, :before_add => :validates_group, :through => :group_users, :conditions => ["groups_users.status = ?", 'active']
**Group**
has_many :users, :through => :group_users, :conditions => ['groups_users.status = ?', 'active']
has_many :subscriptions, :order => 'subscriptions.expiration_date DESC', :group => 'subscriptions.product_name', :conditions => ['subscriptions.status IN (?)', [:active, :canceled]]
**Subscription**
belongs_to :group
そのため、グループは同じ製品に対して複数のサブスクリプション (異なる製品; subscription.product_name) を持つことができます (更新されたか、システム内の古いものであったかによって異なります)。has_many :subscriptions
order_by が正しく機能していません。
例:
ユーザーが 3 つのサブスクリプションを持っている場合 (製品 X に 1 つ、製品 Y に 2 つ)。そして、次を実行します
ユーザー モデルのサブスクリプション メソッド:
def subscriptions
subs = []
groups.collect(&:subscriptions).each do |sub|
if sub
subs << sub
end
end
subs.flatten!
end
u = User.last
u.subscriptions
製品 X のものは問題なく戻ってきますが、製品 Y を引き戻すと、リストの最初のもの (過去の有効期限を持つもの) が引き戻されます。
これが意味をなさない場合は申し訳ありませんが、できる限り説明しようとしています。注文とグループが関連付けで適切に機能していないこの状況に遭遇した人はいますか?