SQL 查询有效,但 ActiveRecord 语法 returns 错误或空关系
SQL query works but ActiveRecord syntax returns errors or an empty relation
CreditCard
belongs_to
User
。 Subscription
也 belongs_to
User
。 A User
has_one
Subscription
and has_many
CreditCard
s.
我需要查询属于 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 })
CreditCard
belongs_to
User
。 Subscription
也 belongs_to
User
。 A User
has_one
Subscription
and has_many
CreditCard
s.
我需要查询属于 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
由于您的关联是相互关联的,因此您应该执行以下操作:
CreditCard.joins(user: :subscription)
.where(subscriptions: { status: :authorized })