我正在尝试检索数据库中的某些对象,但我无法弄清楚如何。 我尝试使用示波器但没有成功,但我认为这不是正确的解决方案。
以下是我主要涉及的文件(删除了不必要的行):
# app/controllers/operators_controller.rb
class OperatorsController < ApplicationController
def index
@operators = Operator.all.sort_by_newest
end
具有以下范围:
# app/models/operator.rb
scope :sort_by_newest, -> { order('created_at DESC') }
然后
# app/views/operators/index.html.erb
<ul class="operators">
<%= render @operators %>
</ul>
这称为以下部分:
# app/views/operators/_operator.html.erb
<% @operators.where(local:true).find_each do |operator| %>
<li><%= link_to operator.name, operator %></li>
<% end %>
运算符的值为Local
(布尔值,默认为false
),有3个元素local
= true
(然后36,其中local = false)。< / p>
2.2.0 :003 > Operator.all.count
(0.2ms) SELECT COUNT(*) FROM "operators"
=> 39
2.2.0 :004 > Operator.where(local: true).count
(0.4ms) SELECT COUNT(*) FROM "operators" WHERE "operators"."local" = 't'
=> 3
2.2.0 :005 > Operator.where(local: false).count
(0.2ms) SELECT COUNT(*) FROM "operators" WHERE "operators"."local" = 'f'
=> 36
问题是:它呈现3个local = true元素... 39次!
我需要的3个单个物体是橙色的。渲染了39次。
如何使这项工作?
编辑:
我想在很多页面中有很多渲染(一个使用“local:true”元素,另一个使用“global:true”元素等等。)所以我想我不能直接修改为运算符:index方法?
答案 0 :(得分:2)
你正在做重复的工作。尝试使用特定查询在控制器操作中搜索运算符:
def index
@operators = Operator.where(local: true).sort_by_newest
end
然后只打印operator
属性,而不在部分内部使用迭代器:
<li><%= link_to operator.name, operator %></li>
答案 1 :(得分:1)
当您致电<%= render @operators %>
时,它会将_operator.html.erb
部分呈现。但是,您不需要遍历@operators
对象来呈现每个单独的@operators
对象。假设您在each
块中,只需编写代码:
<li><%= link_to operator.name, operator %></li>
答案 2 :(得分:0)
在编辑OP后我问过我自己的问题(如何在不触及操作符的情况下发出请求:index方法)
您可以在不触及运算符的情况下拥有数据库的多个视图:索引方法:
# app/model/operator.rb
def index
@operators = Operator.all.sort_by_newest
end
接收请求的渲染(如前所述,实际上是迭代,所以不需要迭代到部分,否则你会有重复):
<%= render @operators #%>
<%= render @operators.where(local:true) %>
<%= render @operators.where(global:true) %>