services rails ruby-on-rails view refactoring dry

ruby on rails - rails - Vista de rieles de secado: parcial contra ayudante



rails object (2)

Yo diría que este es un gran ejemplo de parcial.

Me reservo ayudantes para generar contenido dinámico arbitrario. Este es un tipo de descripción general. ¿Qué tal un ejemplo? Yo haría un ayudante que divide una matriz de objetos ActiveRecord y los muestra en N columnas. En este caso, la estructura del objeto pasado se está aprovechando de alguna manera para generar el contenido, pero el contenido en sí no es importante. Si lo piensas, form_for también se ajusta a esta descripción.

Por el contrario, los parciales son excelentes para el contenido "estático", que debe reutilizarse en varias páginas. Por ejemplo, crearías un parcial para representar un solo elemento. El parcial determina la representación ''estática'' de un elemento particular.

Su ejemplo cabe mucho mejor en la segunda bandeja, en mi opinión. Dado que @item no se está manipulando para generar el contenido, de hecho, apenas se está utilizando. Parece que este ayudante es en su mayoría código de pegamento para otros ayudantes adecuadamente creados ( share_button y marks_bar ). El caso de uso perfecto para un parcial!

Esta pregunta ya tiene una respuesta aquí:

Necesito un consejo sobre las mejores prácticas para el código de vista SECADO. Tengo tres clases (NewsItem, RssItem y BlogItem) en mi aplicación, que usan vistas separadas, pero tienen partes similares en ellas. Una de las partes es tal:

<% if current_user %> <footer> <%= marks_bar(@item) %> <%= favorite_button(@item, "blog_item") || delete_from_favorite_button(@item, "blog_item") %> <%= share_button(@item) %> <% if current_user.is_mine?(@item) %> <div><%= link_to "Edit", edit_user_blog_item_path(current_user, @item) %></div> <% end %> </footer> <% end %>

Es casi igual para las tres clases, así que decidí llevarlo a un lugar separado. Y aquí estoy confundido: ¿debo usar un método parcial o auxiliar para ello? Sé que los helpers se usan principalmente para separar el código ruby ​​del HTML, pero en este caso el helper se verá así:

def toolbar_for(item, type_str, edit_path) if current_user content_tag(:footer) do |b| marks_bar(item).to_s << (delete_from_favorite_button(item, type_str) || favorite_button(@item, type_str)).to_s << share_button(@item).to_s << (content_tag(:div) { link_to("Edit", edit_path)} if current_user.is_mine?(@item)).to_s end end end

Entonces, casi no hay código HTML aquí.

¿Podría por favor aconsejarme, qué método es mejor en su opinión y por qué? Además, ¿existen algunos problemas de rendimiento en estos métodos (por ejemplo, la concatenación de cadenas múltiples o la carga parcial frecuente pueden ser costosas)? (Esta aplicación es bastante cargada)


Yo usaría una vista parcial para esto. Buena regla general: si HTML es la salida, use una parcial. Los ayudantes no son el cajón de la chatarra de la aplicación Rails; deberían usarse para generar datos, no para presentar. Aunque generalmente recomiendo a las personas que eviten a los ayudantes en general, en favor de los presentadores, que son muy poco utilizados en el mundo de Rails.