Рефакторинг рельсов3 посмотреть вызов activerecord - PullRequest
0 голосов
/ 14 декабря 2011

В следующем фрагменте я выполняю много манипуляций с базой данных в представлении. (. Где и две петли каждый). Каков наилучший способ рефакторинга этого кода вне поля зрения?

В представлении: index.html.erb

<%- @lesson.sections.each do |section| -%>
          <%- section_correlations = section.correlations.where(:grade => 4) %>
          <%- unless section_correlations.blank? -%>
              <h3><%= section.full_title %></h3>
                <%- section_correlations.each do |correlation| -%>
                      <%= correlation.description %>
                <%- end -%>
          <%- end -%>
<%- end -%>

1 Ответ

1 голос
/ 14 декабря 2011

в файле модели сечения вы можете добавить следующий метод

def get_correlation_descriptions(grade)
  correlations.where(:grade => grade).map { |c| c.description }
end

и в вашей модели урока:

def sections_with_correlation_names(grade)
  section_data = []
  sections.each do |s|
    correlation_names = s.get_correlation_descriptions(grade)
    unless correlation_names.blank?
      section_data << { :name => s.full_title, :correlations => correlation_names } 
    end
  end
  section_data
end

тогда по вашему мнению:

<%- @lesson.sections_with_correlation_names(4).each do |section| -%>
  <h3><%= section[:name] %></h3>
  <%= section[:correlations].join("\n") %>
<%- end -%>
...