在Rails 3.2应用程序中,我有一个模型项目,它有许多任务。每个任务都有一个:status字段,它是一个整数,如下所示
1=Normal
2=Urgent
在Project show视图中,如果任何相关任务被标记为紧急,我想显示文本警报。
如果状态字段在Project模型中,我会这样做:
<% if Project.status == 2 %>
<div class="alert">URGENT TASKS!</div>
<% end %>
如何设置一个类似的if语句,它将遍历所有相关的任务,如果至少有一个任务被标记为紧急,则返回true?
我不确定我应该为这种功能搜索什么术语。或许我不是以正确的方式看问题。对于正确方向的指示,我将不胜感激。
由于
答案 0 :(得分:3)
Project中的此方法将执行此操作:
def urgent?
tasks.detect{|t| t.status==2}
end
如果您将@project
设置为您正在查看的项目,那么您可以这样做:
<% if @project.urgent? %>
...whatever ...
<% end %>
在回答您的评论时添加了下一位。 Project中的此方法将返回特定项目中任何任务的最高优先级集(示例中为最小数字):
def highest_priority
tasks.map{|t| t.status}.min
end
然后,您可以在视图中切换它们:
<% case @project.highest_priority
when 1 %>
...priority 1 stuff...
<% when 2 %>
...priority 2 stuff...
<% when 3 %>
...and so on...
<% end %>
答案 1 :(得分:0)
我想你想检查一个项目是否有一些紧急任务要完成。如果是这样,我认为实现这一目标的最佳方法是在Project模型中创建新方法,如下所示:
def has_urgent_task?
tasks.map(&:status).include?(Task::URGENT)
end
假设您已在任务模型中将状态定义为常量,如果不是仅将Task :: URGENT替换为2。
因此,在您看来,您只需要这样做:
<% if @project.has_urgent_task? %>
<div class="alert">URGENT TASKS!</div>
<% end %>