2017-01-26 9 views
0

У меня есть метод определения данных для менеджера отслеживания google. Первая логика организована в представлениях, но я не думаю, что это правильно. Должен ли я помещать метод в контроллер (application_controller) или в модель?метод определения данных для менеджера отслеживания google

def gtm_data(data_hash = nil) 
    @gtm_data ||= {} 

    if @dynamic_page 
    gaPageUid = 'category-' + @dynamic_page.uid 
    elsif @product 
    gaPageUid = 'product' 
    else 
    gaPageUid = 'other' 
    end 

    @gtm_data = { 
    gaLocale: @locale, gaLanguage: @lang, 
    gaRegion: current_site.region, gaPageUid: gaPageUid 
    } 

    # setter call 
    @gtm_data.merge!(data_hash) if data_hash 

    @gtm_data 
end 

ответ

1

Да, вы, вероятно, захотите вытащить это из своего вида. Вы можете подумать о добавлении его в application_controller (или более конкретный контроллер, если он вам не нужен в приложении) и выставить вспомогательный метод. В основном все, что вы должны сделать, это добавить свой метод application_controller, а также это:

helper_method :gtm_data

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

+0

Спасибо, еще один вопрос, стоит ли тестировать (rspec) этот метод? –

+0

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

+0

Не могли бы вы помочь мне с написанием теста? –

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

  • Нет связанных вопросов^_^