【问题标题】:Passing variable within erb loop在erb循环中传递变量
【发布时间】:2014-03-07 18:55:35
【问题描述】:

我是 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 时,我想将 foo.bar 的值保留在 @baz 中。一旦我遇到 B 的值,我希望 @baz 保留 B 的值。有意义吗?

提前致谢。

【问题讨论】:

  • 还有一件事。把else end return current_class写成else current_class end
  • 你把大家搞糊涂了。 AB 是什么?是bar的值吗?在您的代码中,您没有在任何地方使用@baz。突然间,它出现在已编辑的部分。
  • @KirtiThorat OP 写了if..else..end 块也是错误的方式。
  • OP - 它不应该current_class,而不是@current_class
  • current_class 和@current_class 都不是。它应该test_class

标签: ruby-on-rails ruby erb


【解决方案1】:

你可以在你的视图中使用它:

    <% @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 对象是坏还是好

【讨论】:

  • 这行得通。谢谢!会投票,但我还没有足够的代表:|
【解决方案2】:

如果我理解正确,您想检查每个 foo 记录,如果 foo.created_at 已经过去 2 周,那么您需要将其“标记”为“坏”,否则如果仍然

就个人而言,我会在“foo”的模型文件中使用“范围”。但是如果你真的想要这个在视图中或者你仍然要对它做一些处理,我会写如下的东西

<%
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 %>

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多