查找不属于某个祖父母的第一条记录

时间:2014-01-01 13:38:57

标签: ruby-on-rails ruby ruby-on-rails-4 associations

三种模式:

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方法无法做到这一点,我正在寻找在找到第一个拟合记录时退出的循环。但同样,我太了解了如何构建这样一个循环。

2 个答案:

答案 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

希望有所帮助!