【问题标题】:Chaining scope methods in rails在 Rails 中链接作用域方法
【发布时间】:2014-06-04 16:11:51
【问题描述】:

上传新照片时遇到问题。

我有一个名为 :most_tagged 的​​作用域,它显然工作得很好。 照片由 most_tagged DESC 显示,但是,当我上传具有 0 个标签的新照片时,它会转到顶部(显示在标记最多的照片之前),而不是转到底部并在标记较少的照片之后显示最后一张。

我应该将另一个方法链接到 most_tagged 范围吗?

class Photo < ActiveRecord::Base
  has_many :tags , dependent: :destroy
  before_destroy { |record| record.tags.destroy_all if record.tags.any? }

  scope :most_tagged, -> { order('tags_count DESC') }
  scope :most_liked, -> { order('cached_votes_up DESC') }

谢谢

【问题讨论】:

  • 你能发布most_tagged范围的内容吗?
  • 发布所有模型文件会有很大帮助
  • 我删除了不相关的代码,希望我没有删除太多...

标签: ruby-on-rails ruby scope


【解决方案1】:

您必须使用NULLS LAST 选项:

scope :most_tagged, -> { order('tags_count DESC NULLS LAST') }

【讨论】:

  • 成功了!那究竟是做什么的?是不是有点hacky?或者这是最佳做法?
  • NULLS LAST 函数自己说话...它将列的NULL 值排序在LAST 位置。这样做并不难,这是标准的 SQL 行为。
  • @KikeIsasiVelasco 如果它解决了你的问题,你应该接受答案