1

我有一条重复的行,输出如下: Call John Jones in -3 days (status)

我有一个名为 show_status(contact,email) 的助手,它将输出该特定电子邮件是否已发送给该特定联系人。

如果它被“发送”,那么整行应该显示为“删除”。

同样,如果天数为 -3 (<0),则该行应格式化为红色。

这是我的技巧,但必须有一种更简洁的方法将逻辑放入控制器中?

我硬编码了一个环绕我想要格式化的行的值,并根据对同一帮助程序的单独调用分配该值:

<% for call in @campaign.calls %>
        <% if !show_call_status(@contact,call).blank? %>
           <%= strike_start = '<s>'%>
           <%= strike_end = '</s>' %>
        <% end %>
        <p>
            <%= strike_start %>
            <%= link_to call.title, call_path(call) %> on 
        <%= (@contact.date_entered + call.days).to_s(:long) %> in <%= interval_email(@contact,call) %> 
        days 
        <%= make_call(@contact,call) %>
        <span class='status'><%= show_call_status(@contact,call) %></span>  
        <%= strike_end %>   
        </p>
<% end %>

我想我想做的就是在视图中没有 if 语句。不知道该怎么做。

4

1 回答 1

1

基本上,我会p根据状态在标签上放置一个类,并让 CSS 决定需要做什么。

所以观点:

<% for call in @campaign.calls %>
  <p class="<%= call_status_class(@contact, call) %>">
    <%= link_to call.title, call_path(call) %> on 
    <%= (@contact.date_entered + call.days).to_s(:long) %> in <%= interval_email(@contact,call) %> 
    days 
    <%= make_call(@contact,call) %>
    <span class='status'><%= show_call_status(@contact,call) %></span>  
  </p>
<% end %>

还有另一个帮手:

def call_status_class(contact, call)
  # do what you have to do to figure out status
  if overdue
    return 'overdue'
  elsif called
    return 'called'
  else
    return 'standard'
  end
end

然后在 CSS 中:

.standard {
  ...
}
.overdue {
  color: red;
}
.called {
  text-decoration: line-through;
}

挑选。如果没有看到所有的辅助函数,我真的不能给你完整的解决方案。希望这可以帮助。

于 2010-05-03T21:19:47.057 回答