2015-01-21 3 views
0

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

Вот пример кода: Первый метод явно отображает ассоциацию. Следующий метод пытается сделать это в общем (этот родительский объект имеет 9 ассоциаций, поэтому я решил писать 9 визуализации методы были бы так не DRY.)

module SurveysHelper 

    def render_demographics_part(survey) 
    render survey.demographics_part if survey.demographics_part 
    end 

    def gen_renderer(part, survey) 
    render survey.part if survey.part 
    end 

end 
+0

Вы можете позвонить прямо в свое представление 'render (survey.part) || content_tag (: p, 'No part found') '. Для каждой ассоциации вы должны определить частичное имя, подобное этой ассоциации. Например, для «demographics_part» вы должны иметь в своих представлениях папку с именем «demographics_parts» и в этой папке частичное, которое будет отображаться при вызове 'render (survey. Demographics_part)' name '_demographics_part .html.erb' – cristian

+0

@ Octopus-Paul, похоже, что вы говорите, что я должен явно отображать детали. Ваш пример 'render (survey.part) || content_tag (: p, 'No part found') 'не будет работать, поскольку survey.part не определен. Это должно быть «render (survey.demographics_part) || content_tag (: p, 'no part found') 'или я пропустил вашу точку? –

+0

Я использовал 'survey.part' только для того, чтобы быть общим. Посмотрите здесь https://speakerdeck.com/carlosantoniodasilva/tricks-that-rails-didnt-tell-you-about-at-railsconf-2014 на 98-м и 99-м слайдах, для лучшего объяснения – cristian

ответ

0

Я сделал это так:

def gen_renderer(part, survey) 
    if part.nil? 
    content_tag(:p, 'incomplete') 
    else 
    render part 
    end 
end 

Я забыл, что part - это просто ссылка на объект - неважно, что это такое, пока он знает, как сделать себя (вам нужно частичное в пути просмотра объекта для этого - app/views/demographics_part/_demographics_part.html.erb)

Это работает, но вероятно, лучший способ.