Existem maneiras diferentes de organizar melhor suas opiniões. Parciais e auxiliares são os métodos padrão. Também há apresentadores e decoradores. Pode ser um pouco confuso saber como e quando usá-lo.
Minha organização
Cada técnica pode ter sua própria utilidade.
Ajudantes
Helpers são métodos genéricos que podem ser usados para diferentes tipos de objetos. I criar esse tipo de ajudantes link_to_update
, big_image
, styled_form
, etc. Esses métodos criar um código html com um estilo CSS ou um texto padrão, por exemplo.
Parciais
Parciais são usados para dividir uma grande visão em partes lógicas menores e para código html maior. I pode ter uma parcial side_menu
, comment_list
, header
, etc.
Apresentadores
Apresentadores são para consultas mais complicadas com dois ou mais modelos. Eu tenho alguns parciais como @page_presenter.page_in_category(ruby_category)
ou @user_presenter.user_following(an_article)
.
Decoradores
Os decoradores devem atuar com apenas um modelo e não devem receber parâmetros (se possível). Eu posso fazer algo como isto user.full_name
, page.big_title
ou category.permalink
. Eu uso a gema Draper .
Se eu pesquisar muitos modelos, não acesso a classe do modelo na visualização. Eu uso a função decorates_finders do draper .
Conclusão
Pode haver uma solução melhor, mas é para mim. Se você tiver uma solução melhor, por favor, me avise.
Tenho apenas uma coisa que não gosto para apresentadores. Não gosto de instanciar um objeto no controlador e passá-lo para a visualização. Não respeita as regras do Sandi Metz . Todas as regras podem ser quebradas por um bom motivo …