我的记录设置如下
Subscription: id, plan_id <- belongs to plan
Plan: id, role_id <- belongs to role
Role: id, name
鉴于此数据
Subscription: id: 1, plan_id: 5
Plan: id: 5, role_id: 10
Role: id: 10, name: 'Gold'
我试图写一个连接,以便我可以根据它们的相关角色找到订阅,即:
Subscription.joins(:plan).joins(:role).where(&#34; roles.name =?&#34;,&#39; Gold&#39;)
但这种做法并不奏效。任何帮助将不胜感激。
感谢。
答案 0 :(得分:1)
如果您正在尝试查找给定角色的所有订阅,为什么不从角色开始?如果我们正确配置它们,Rails可以处理这些“一步删除”关联。
gold_role = Role.where(name: 'Gold').first
gold_role.subscriptions
这可以通过Rails' has_many :through
relations实现。我认为这是您模型的正确设置:
class Subscription < ActiveRecord::Base
belongs_to :plan
has_one :role, through: :plan
end
class Plan < ActiveRecord::Base
has_many :subscriptions
belongs_to :role
end
class Role < ActiveRecord::Base
has_many :plans
has_many :subscriptions, through: :plans
end
答案 1 :(得分:1)
如果您有正确的关联,请使用此:
Subscription.includes(:plan => [:role]).where("roles.name = 'Gold'").first
您也可以手动编写查询:
Subscription.joins("INNER JOIN plans ON plans.id = subscriptions.plan_id
INNER JOIN roles ON roles.id = plans.role_id").where("roles.name = 'Gold'").first