Por lo tanto, todos nos esforzamos por reducir la duplicación (DRY) y otros olores, y mantener nuestro código lo más limpio y agradable posible. Para el código de Ruby, hay muchos instrumentos para detectar olores, por ejemplo, el bastante agradable servicio Caliber.Cómo manejar el olor trivial de "duplicación de código" en Rails/Ruby
Sin embargo, parece que tengo una definición diferente de duplicación de código que las herramientas. Creo que esto podría estar relacionado con la forma de hacer las cosas de Ruby, donde casi nunca se accede directamente a una variable, sino a través de una llamada a un método. Considérese este fragmento de un controlador Rails:
def update_site_settings
SiteSettings.site_name = params[:site_name]
SiteSettings.site_theme = params[:site_theme]
expire_fragment('layout_header')
flash[:notice] = t(:Site_settings_updated)
redirect_to :controller => 'application', :action => 'edit_site_settings'
end
Esta se encuentra en posición con una advertencia duplicación de código, a causa de las dos llamadas al método "params". Entonces mi pregunta es, ¿realmente sería una mejora asignar el params
a una variable local? Considero que la forma en que está escrito es la forma más clara y concisa de hacerlo, y el hecho de que params
es un método y no una variable es simple "el costo de hacer negocios" en Ruby.
¿Estoy viendo esto de la manera incorrecta?
EDIT: En este caso, una forma más bonita podría ser la de hacer una actualización SiteSettings.update_attributes(params)
estilo. Considere, si se quiere, el mismo problema en otro fragmento:
def update
@mailing_list = MailingList.find(params[:id])
if @mailing_list.update_attributes(params[:mailing_list])
flash[:notice] = t:Mailing_list_updated
redirect_to(mailing_lists_path)
...
Gracias chicos. Voy con la respuesta general de "usar el informe de olores como guía, y no preocuparme por cada detalle". –