2013-12-12 3 views
0

У меня есть приложение, имеющее местоположение, и каждое местоположение может иметь несколько календарей на основе назначенных ему направляющих лиц.Переместить код фильтра в контроллер или помощник?

Прямо сейчас, чтобы фильтровать правильные события, которые соответствуют календарю, я делает их в Адрес шоу зрения

Location.html.erb

<%= render partial: @directional_faces %> 

_directional_face.html .erb

<%= directional_face.name %> 
<% @filtered_event_strips = directional_face.campaigns.event_strips_for_month(@shown_month, @first_day_of_week)%> 
<%= raw(event_calendar) %> 

Эта часть кода:

<% @filtered_event_strips = directional_face.campaigns.event_strips_for_month(@shown_month, @first_day_of_week)%> 

является то, что позволяет концепции нескольких календарей, которые будут отображаться, а затем показываются только кампании, которые принадлежат к этому календарю на основе направленного лицом показано на рисунке.

Я хотел бы переместить это в контроллер или вспомогательные стихи, если это возможно, частично. Или это нормально?

Подробнее

calendar_helper.rb

def event_calendar_opts 
    { 
    :year => @year, 
    :month => @month, 
    :event_strips => @filtered_event_strips, 
    :month_name_text => I18n.localize(@shown_month, :format => "%B %Y"), 
    :previous_month_text => month_link(@shown_month.prev_month), 
    :next_month_text => month_link(@shown_month.next_month), 
    :first_day_of_week => @first_day_of_week, 
    } 
    end 

Местоположение Контроллер #show

def show 
    @month = (params[:month] || (Time.zone || Time).now.month).to_i 
    @year = (params[:year] || (Time.zone || Time).now.year).to_i 
    @shown_month = Date.civil(@year, @month) 
    @first_day_of_week = 1 
end 

ответ

0

Определенно положить, что в контроллере. Если это обычная вещь (используется более чем двумя представлениями), я бы поставил ее на модель DirectionalFace, чтобы сделать ее еще проще. Вид, как

def filtered_event_strips(shown_month, first_day_of_week 
    self.campaigns.event_strips_for_month(shown_month, first_day_of_week) 
end 

Кроме того, будьте осторожны, как много переменных экземпляра вы переходите к вашим представлениям. У вас 3 в количестве строк. Существует, как правило, более простой способ сохранить информацию в контроллере/модели. Кроме того, убедитесь, что вы используете @, когда вам действительно нужно. Например, в этом контексте не имеет смысла для @filtered_events_strips не просто filtered_event_strips.

+0

Этот фильтр используется только одной моделью .. Расположение. Причина, по которой вызов состоит из трех уровней, заключается в том, что, когда кампания создана, ей назначается направленная грань. Полосы событий - это то, как это определено в драгоценном камне «event_calendar». Не знаю, как это изменить. – RubyNewbie

+0

Когда я переставляю этот код в контроллер Directional_Face, он дает мне ошибку «неопределенный метод' first »для nil: NilClass« – RubyNewbie

+0

Ну, у вас есть звонок сначала где-то, что вы еще не отправили , Отправьте еще один код. – kddeisz

Смежные вопросы