Rails:如何组合关联和范围

时间:2015-11-07 17:34:52

标签: ruby-on-rails activerecord

我想为特定用户获取“offer”类型的所有TaskInteractions。

我有一个用户模型

has_many :task_interactions

和TaskInteraction模型

belongs_to :user

TaskInteraction有一个属性“type”,它可以有值offer或quiz。

目前,我正在使用范围

scope :offer_interactions, -> { where(type: 'offer') }

我得到了结果

@user.task_interactions.offer_interactions

或者在用户模型中我可以定义:

def offer_interactions
  self.task_interactions.where(type: 'offer')
end

或者如果我结合范围和offer_interactions方法:

def offer_interactions
  self.task_interactions.offer_interactions
end

问题:

有没有更好的方法来获得这个结果?

是否有Rails方式解决这个问题?

1 个答案:

答案 0 :(得分:2)

您还可以在用户模型中添加范围has_many关系,只考虑商品task_interactions:

has_many :offer_interactions, -> { where(type: 'offer') }, class_name: 'TaskInteraction'

然后只需致电@user.offer_interactions