Как я могу изменить теги / класс CSS некоторого динамического текста на основе вывода из помощника? - PullRequest
1 голос
/ 04 мая 2010

У меня есть повторяющаяся строка, которая выводит что-то вроде: Звоните Джону Джонсу через -3 дня (статус)

У меня есть помощник show_status (контакт, электронная почта), который будет выводить, было ли это электронное письмо отправлено этому конкретному контакту.

Если оно «отправлено», то вся эта строка должна отображаться как «вычеркнуть».

Аналогично, если число дней равно -3 (<0), строка должна быть отформатирована красным. </p>

Вот мой хак, но должен быть более чистый способ поместить логику в контроллер?

Я жестко кодирую значение, которое обтекает строки, которые я хочу отформатировать, и назначаю значение на основе отдельного вызова для того же помощника:

<% 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. Не уверен, как это сделать.

1 Ответ

1 голос
/ 04 мая 2010

По сути, я бы поместил класс в тег 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;
}

Выберите и выберите. Я не могу дать вам полноценное решение, не увидев все вспомогательные функции. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...