SQL 查询有效,但 ActiveRecord 语法 returns 错误或空关系

SQL query works but ActiveRecord syntax returns errors or an empty relation

CreditCardbelongs_toUserSubscriptionbelongs_to User。 A User has_one Subscription and has_many CreditCards.

我需要查询属于 Subscription.status"authorized" 的用户的 CreditCard

这是适合我的查询:

select * from credit_cards
join users on users.id = credit_cards.user_id
join subscriptions on users.id = subscriptions.user_id
where subscriptions.status = 'authorized'

但是当我执行 CreditCard.joins(:user).joins(:subscription) 时,即使没有 where 子句,我也会得到一个空关系:

#<CreditCard::ActiveRecord_Relation:0x2ace5a5be2f0>

如果我将 .emtpy 附加到查询结果,我得到:

Can't join 'CreditCard' to association named 'subscriptions'; perhaps you misspelled it?

为什么它不起作用?

CreditCard.joins(user: :subscription)

有关 joins 的详细信息,请参阅 https://guides.rubyonrails.org/v5.0/active_record_querying.html#joins

中的 12.1.3 加入多个关联 部分

由于您的关联是相互关联的,因此您应该执行以下操作:

CreditCard.joins(user: :subscription)
          .where(subscriptions: { status: :authorized })