Как можно уменьшить количество циклов в этом VIEW в Rails при использовании: collection? - PullRequest
0 голосов
/ 27 мая 2010

Я использую: collection для просмотра всех контактов, входящих в данную кампанию.

Но в рамках этой Кампании я проверяю три разных Модели (каждая со своей частичной). Такое ощущение, что я просматриваю список контактов 3 раза. Как я могу сделать это намного стройнее?

<h2>These are past due:</h2>

<% @campaigns.each do |campaign| %>
   <h3>Campaign: <%= link_to campaign.name, campaign %></h3>
   <strong>Emails in this Campaign:</strong>
   <% for email in campaign.emails %>
      <h4><%= link_to email.title, email  %> <%= email.days %> days</h4>

         <% @contacts= campaign.contacts.find(:all, :order => "date_entered ASC" )%> <!--contacts collection-->   

         <!-- render the information for each contact -->
         <%= render :partial => "contact_email",
                    :collection => @contacts,
                    :locals => {:email => email} %>
    <% end %>

       Calls in this Campaign:
       <% for call in campaign.calls %>
          <h4><%= link_to call.title, call  %> <%= call.days %> days</h4>
          <% @contacts= campaign.contacts.find(:all, :order => "date_entered ASC" )%> <!--contacts collection-->      
         <!-- render the information for each contact -->
         <%= render :partial => "contact_call",
                    :collection => @contacts,
                    :locals => {:call => call} %>
       <% end %>

       Letters in this Campaign:
       <% for letter in campaign.letters %>
          <h4><%= link_to letter.title, letter  %> <%= letter.days %> days</h4>
          <% @contacts= campaign.contacts.find(:all, :order => "date_entered ASC" )%> <!--contacts collection-->      
         <!-- render the information for each contact -->
         <%= render :partial => "contact_letter",
                    :collection => @contacts,
                    :locals => {:letter => letter} %>
       <% end %>
<% end %>

1 Ответ

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

Если вы хотите, чтобы они были упорядочены по типу (контакты, электронные письма, письма и т. Д.), Я не думаю, что вам удастся извлечь что-то более эффективное (только для извлечения повторяющегося кода в отдельный частичный фрагмент и рендеринга коллекции там:

<% @contacts = campaign.contacts.find(...) %>
<% [:emails, :calls, :letters].each do |asset| %>
  <h4><%= asset.humanize %> in this campaign</h4>
  <%= render :partial => 'asset', :collection => campaign.send(asset), :as => :asset %>
<% end %> 

Затем внутри частичного _asset вы можете использовать переменную asset для ссылки на текущий объект и достичь контактов через @contacts экземпляр var.

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