我是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的值。有意义吗?
提前致谢。
答案 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 %>