三种模式:
class Subscription < ActiveRecord::Base
belongs_to :plan
end
class Plan < ActiveRecord::Base
has_many :subscriptions, dependent: :destroy
belongs_to :plan_category
end
class PlanCategory < ActiveRecord::Base
has_many :plans
end
我有一个subscriptions
的集合,想要找到最新的PlanCategory
“祖父母”与title: "unwanted"
。
这是我的愚蠢尝试(在很多部分都是错误的):
Subscription.joins(plan: :plan_category).where.not(title: "unwanted")
如果使用常见的Rails方法无法做到这一点,我正在寻找在找到第一个拟合记录时退出的循环。但同样,我太了解了如何构建这样一个循环。
答案 0 :(得分:2)
Subscription.joins(:plan => :plan_category).where("plan_categorys.title != 'unwanted'")
答案 1 :(得分:1)
这是一个很长的版本:
Subscription.joins(%q[
INNER JOIN plans ON plans.id = subscriptions.plan_id
INNER JOIN plan_categories ON plan_categories.id = plans.id
]).where.not(plans: { plan_categories: { title: "unwanted" }}).order("created_at").last
这是一个我没有测试过的较短版本:
wanted_plans = Plan.joins(:plan_categories).where.not(plan_categories: { title: "unwanted" })
Subscription.joins(:plans).merge(wanted_plans).order("created_at").last
希望有所帮助!