Ruby on Rails:在将模型返回到控制器之前过滤模型中的记录列表?

时间:2017-02-27 14:51:18

标签: mysql ruby-on-rails activerecord filter

假设我有以下型号:

class Computer < ActiveRecord::Base

end

我检查控制器中的所有计算机,如下所示:

@computers = Computer.all

现在我添加了一项功能来停用某些计算机并过滤停用的计算机,如下所示:

  class Computer < ActiveRecord::Base
      scope :not_deactivated, -> { where('deactivated IS NULL OR deactivated = ?', false) }

  end

并在我的控制器中:

@computers = Computer.all.not_deactivated

此方法的问题是我必须在所有控制器中添加not_deactivated

是否可以在模型中执行此过滤器,以便我不必触摸控制器?

2 个答案:

答案 0 :(得分:1)

在控制器中做的简单和常见的事情:

before_action :not_deactivated # , only [:index...]

private
def not_deactivated
@computers = Computer.where(your code) 
end

由于控制器处理视图,因此无论如何都必须以某种方式启动对象。通过这样过滤,您可以使用模型过滤器实现您现在要做的事情。

答案 1 :(得分:0)

您可以通过在每次拨打<script type="text/javascript" src="Scripts/html2canvas.js"></script> <script type="text/javascript" src="Scripts/html2canvas.min.js"></script> document.addEventListener("DOMContentLoaded", function (event) { document.getElementById("Print_Button").addEventListener("OnItemCommand", (function () { html2canvas(document.getElementById("form1"), { onrendered: function (canvas) { cvs = canvas.toDataURL('image/png'); cvs.save("mcn.pdf") } }); })); }); 模型时声明default_scope来运行此操作来实现此目的

Computer

因此,当您运行class Computer < ActiveRecord::Base default_scope { where('deactivated IS NULL OR deactivated = ?', false) } end 时,您获得的结果为Computer.all