在 rails 中显示范围的结果

Posted

技术标签:

【中文标题】在 rails 中显示范围的结果【英文标题】:Displaying results from scopes in rails 【发布时间】:2014-12-16 19:56:47 【问题描述】:

我正在开发具有模型Exercise 的应用程序,并添加了如下所示的三个作用域方法:

scope :easy, ->  where(level: "easy") 
scope :medium, ->  where(level: "medium") 
scope :hard, ->  where(level: "hard") 

我有一个视图,我希望在哪里显示内容取决于我使用的方法。例如,如果我点击链接“easy”,它应该会显示数据库中所有简单的练习等等。但我知道如何开始。

【问题讨论】:

【参考方案1】:

考虑一下。经典的脚手架生成索引方法是这样做的:

def index
  @exercises = Exercise.all
end

但您需要改为调用其中之一

Exercise.easy
Exercise.medium
Exercise.hard

您可以修改索引方法来做到这一点:

SCOPES = %w|easy medium hard|

def index
  @exercices = if params[:scope].present? && SCOPES.include?(params[:scope])
    Exercise.public_send(params[:scope])
  else
    Exercise.all
  end
end

然后您转到“/exercies?scope=easy”,或者您的练习索引所在的任何位置。如果您了解正在发生的事情,您可以使用此 gem has_scope,它将问题简化为:

class ExercisesController < ApplicationController
  has_scope :easy,   type: :boolean
  has_scope :medium, type: :boolean
  has_scope :hard,   type: :boolean

  def index
    @exercises = apply_scopes(Exercise)
  end
end

然后转到“/exercises?hard=true”

【讨论】:

听起来很不错,但我尝试使用 has_scope 并给出了这个错误:Unknown key: :boolean. Valid keys are: :type, :only, :except, :if, :unless, :default, :as, :using, :allow_blank。编辑我正在使用 Rails 4.2.0.rc1。

以上是关于在 rails 中显示范围的结果的主要内容,如果未能解决你的问题,请参考以下文章

Rails、Simple Form 和 Javascript 显示/隐藏脚本

从 Rails 脚手架显示日期范围内的数据

具有多态模型的 Rails 范围

Rails:使用范围来显示模型的不同子集以及如何以较少 DRY 的方式构建它?

如何在 Rails 范围内模拟 Postgresql EXCEPT 运算符?

Rails 查询关联的模型范围