【问题标题】:Rails 4 scope add filtered out recordRails 4范围添加过滤掉的记录
【发布时间】:2014-12-18 04:57:30
【问题描述】:

我有这个范围来显示最近的帖子,但我也希望显示过时的置顶帖子。也就是说,粘性帖子是在 3 天前创建的,第一个条件是选择该帖子,但是,我还需要将具有“sticky: true”布尔值的帖子包含在 :to_show 范围内。

我试过了,但没用。

scope :to_show, -> { where("created_at > ?", Time.now - 1.day).except(sticky: true).order("created_at desc") }

请指教。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4 activerecord scope


【解决方案1】:

听起来您正在尝试执行以下操作:

  1. 包括所有“置顶”的帖子
  2. 包括最近一天创建的所有帖子
  3. 按从最新到最旧的顺序排列这些帖子(您是否希望先对粘性帖子进行排序?)

在这种情况下,您真正​​想要的是 where 子句中的“或”条件。类似的东西

scope :to_show, -> { where("(sticky = 1) OR (created_at > ?)", Time.now - 1.day).order("created_at desc") }

如果你想把粘性物品放在顶部,那么 order 子句会变成

scope :to_show, -> { where("(sticky = 1) OR (created_at > ?)", Time.now - 1.day).order("sticky desc, created_at desc") }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多