Advertencia: Noob aquí.Rieles: refactorización, vistas, ayudantes: ¿cómo va todo junto?
Sé que este es un tema trivial, pero estoy teniendo muchas dificultades para descubrir cómo puedo simplificar mis vistas al mover partes de ellas en ayudantes. Por ejemplo, siempre he leído que los condicionales en sus vistas son los principales candidatos para la extracción en ayudantes, pero realmente no pude encontrar ejemplos de esto, y mis intentos de lograr esto fallaron.
Por ejemplo, supongamos que tengo:
#index.html.erb
<% for beast in @beasts do -%>
<% if beast.dead? -%>
<%= beast.body %>
<%= link_to "bury", bury_beast_path(:id => beast.id) %>
<% else -%>
<%= beast.body %>
<%= link_to "kill!", kill_beast_path(:id => beast.id) %>
<% end -%>
<% end -%>
me molesta un poco para tener esto en mi punto de vista, pero exactamente cómo podría yo pasar esto a un ayudante en su lugar? Y simplificar aún más, si es posible. (He leído en alguna parte que los condicionales son malos pero es sólo más allá de mí cómo se puede programar nada sin ellos.)
Otro ejemplo: Necesito id
mis body
etiquetas con el formato controller_action
. El mejor que tengo hasta ahora es la siguiente:
#index.html.erb
<body id="<%= controller_action %>">
... y ...
#application_helper.rb
def controller_action
@id = @controller.controller_name + "_" + @controller.action_name
end
No soy un experto, pero que sigue siendo feo incluso para mí.
Para hacer las cosas más complicadas, Ryan Singer said something I liked: para tratar ERB como una etiqueta de imagen, usando ayudantes para "revelar la intención". Luego, en el siguiente aliento, diciendo que no deberías tener HTML en ayudantes, es el camino al infierno. WTF? ¿Cómo son ambas cosas compatibles? Si ha llegado al punto en el que puede declarar comportamientos en la vista, seguramente debería haber una gran cantidad de HTML que se renderice detrás de escena. No puedo entenderlo.
Entonces, eso es básicamente. Agradecería que alguien pudiera compartir algunas ideas al respecto, o señalarme algunas buenas lecturas en profundidad sobre el tema, que encontré que tienen una cobertura muy débil en la web. Ya lo busqué en Google hasta el cansancio, pero quién sabe.
Nota secundaria. Usar 'for' está bien, pero usar un iterador es más una convención de Ruby, por ejemplo,' <% @ beasts.each do | bestia | %> '. –
@Sarah: gracias. Es que realmente me gusta el aspecto del lenguaje natural de usar 'for'. –