在erb循环中传递变量

时间:2014-03-07 18:55:35

标签: ruby-on-rails ruby erb

我是Ruby和Rails的新手。我正在循环一组记录并测试年龄。如果有一个超过14天的记录,我想设置一个标志,这组记录需要注意或“坏”。我正在努力弄清楚如何将变量传递给erb循环,在这种情况下我使用的是current_class。

在我的控制器中,我有这段代码:

def current_class
    @current_class = (params[:current_class]) 
end

在我的application_helper中,我有以下代码:

def name_class(t2 = nil, test_class)
    t1 = Time.now
    age = (t1 – t2) / 86400
    if test_class == nil || “good”
        current_class = age >= 14 ? “bad” : “good”
    else
    end
    return current_class
end

在我看来,我有以下代码。

<% foo.each do |bar| %>
    <%= name_class bar.created_at, @current_class %>
    <%=h current_class %>
<% end %>

输出将是当前节点的评估,但我想要做的是,一旦我达到超过2周的记录,current_class对于该组的其余部分将具有“坏”值。我做错了什么指针?

为了清晰起见而编辑。

通常我要做的是通过erb循环保持一个值。

所以我有一组名为foo的5条记录。每条记录都有一个名为bar的属性:

1 = A
2 = A
3 = B
4 = A
5 = A

当我遍历foo时,我希望在@baz中保留foo.bar的值。一旦我遇到B的值,我希望@baz保留B的值。有意义吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您可以在视图中使用此功能:

    <% @current_class = 'bad' if foo.any?{|bar| name_class(bar) == 'bad'} %>

    <% foo.each do |bar| %>
      <%= name_class(bar) %>
      <%h @current_class %>
    <% end %>

第一行代码将检查foo中是否有任何不良记录,然后将@current_class设置为'bad'(如果有)。


在你的助手方法中:

    def name_class(bar)
      t2 = bar.created_at
      t1 = Time.now
      age = (t1 – t2) / 86400

      return age >= 14 ? “bad” : “good”
    end

name_class方法只检查单个bar对象是坏还是好

答案 1 :(得分:0)

如果我理解正确,你想检查每个foo记录,如果foo.created_at已经过了2周,那么你想要'标记'为坏,否则如果仍然&lt; 14天,“标记”为好。如果是这样,并且因为你希望它持久化,我建议你在foo的表中添加一个列/属性,比如一个名为'is_expired'的布尔值。但是我的下面代码假设您不会使用像'is_expired'这样的新列。

就个人而言,我会在'foo'的模型文件中使用'scope'。但是如果你真的想在视图中使用它,或者你仍然会用它进行一些处理,我会写下面的内容

<%
good_foos = []
bad_foos = []
%>
<% foo.each do |f| %>
    <!-- If GOOD FOO --!>
    <% if name_class(f.created_at, @current_class) == "good" %>
        <!-- ADD FOO'S ID TO 'GOOD' ARRAY -->
        <% good_foos << f.id %>
    <!-- ELSE IF BAD FOO -->
    <% else %>
        <!-- ADD FOO'S ID TO 'BAD' ARRAY -->
        <% bad_foos << f.id %>
    <% end %>
<% end %>
<!-- PROCESS THE GOOD FOOS AND BAD FOOS HERE -->
<!--EX -->
<%= Foo.where(:id => good_foos).each do %>
    <!-- DO SOMETHING WITH FOO -->
<% end %>