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 に答える