0

我有三个模型,ModelModelTypeModelCategory。它们通过关联表(例如ModelTypeRelationship和)相互连接ModelCategoryRelationship

# 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的对象数组。可能与多个或相关联。ModelTypemodel1modelsmodel_typesmodel_categories

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

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

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

注意:返回一个对象model_type1.models数组。Modeltype1

4

1 回答 1

1

首先,为您的 ModelType 和 ModelCategory 模型添加一个范围:

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

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

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,因此您可以按此过滤。

于 2012-05-06T22:40:02.933 回答