【问题标题】:Named Scope in Rails to order Record by number of associated Records在 Rails 中命名范围以按关联记录的数量对记录进行排序
【发布时间】:2014-05-19 17:47:04
【问题描述】:

我是 Rails 新手。我有 2 个嵌套资源:照片和标签。

Photos
  Tags
end

照片有很多标签,标签属于照片。

我想创建一个范围,按照片中的标签数量对照片进行排序。 他们的关系在标签中:

t.integer "photo_id"与该列。

如果我首先想要标签最多的照片,我应该如何制作我的范围?

非常感谢。

【问题讨论】:

  • scope :most_tagged, -> { order(:tags).reverse_order.count.limit(10) } ,但问题是标签不是照片的列......所以这就是我不这样做的原因不知道怎么关联

标签: ruby-on-rails named-scope


【解决方案1】:

我建议阅读一些关于 belongs_tohas_one 关联的文档。

您可能对belongs_to:counter_cache 选项特别感兴趣,以便跟踪每张照片有多少标签。这也将为您提供一列进行排序(和索引)。

从那里,从互联网上的示例创建您需要的范围应该非常简单。

【讨论】:

  • 嗨!我在 Photos 模型中添加了一个名为 tags_count 的列,整数类型。我还在我的 Tag 模型中添加了一个 counter_cache: true 。我现在应该如何制作我的范围?
  • 我这样做了:scope :most_tagged, -> { order('tags_count desc') } ,它没有给出错误但顺序不正确。我应该重置我的 ddbb 吗?
  • 我实际上不熟悉最新版本的 Rails ActiveRecord 语法(我最熟悉 2.3),但我猜范围的语法应该与您的语法非常相似输入原始查询。每张照片的标签计数是否正确?
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2022-10-01
  • 2011-04-21
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多