Rails - 选择匹配两个单独关联条件的模型

时间:2012-05-06 18:41:16

标签: ruby-on-rails associations

我有三个模型,ModelModelTypeModelCategory。它们通过ModelTypeRelationshipModelCategoryRelationship等关联表相互连接。

# app/models/model.rb
class Model < ActiveRecord::Base
  has_many :model_type_relationships, dependent: :destroy
  has_many :model_category_relationships, dependent: :destroy
  has_many :types, through: :model_type_relationships
  has_many :categories, through: :model_category_relationships
  ...
end

注意:model1.type将返回与ModelType关联的model1个对象数组。 models可能与多个model_typesmodel_categories

相关联

我希望能够选择一个随机Model,使其为type1category1

我在选择Model type1时取得了一些成功,但之后我陷入困境。这是我选择的代码:

ModelType.find_by_name("type1").models.find(:first, :order => "Random()")

注意:model_type1.models会返回Model type1个{{1}}个对象的数组。

1 个答案:

答案 0 :(得分:1)

首先,将范围添加到ModelType和ModelCategory模型中:

scope :named, lambda { |name| where(arel_table[:name].eq(name)) }

您想要选择“模型”,因此很自然地从Model类开始查询:

Model.joins(:types).scoped.merge(ModelType.named("type1"))

最后,您可以通过这种方式组合范围:

Model.joins(:types, :categories).scoped.merge(ModelType.named("type1"))
  .scoped.merge(ModelCategory.named("category1"))

Obs:我假设ModelType和ModelCategory具有属性:name,因此您可以按此过滤。