No se admite el paso implícito de argumentos de super de método definido por define_method ()

En la página 537 – 541 de ” Desarrollo web ágil con Rails ” (tercera edición) tiene el código de “Formadores de formularios personalizados” de la siguiente manera:

class TaggedBuilder < ActionView::Helpers::FormBuilder # 

#
# #

def self.create_tagged_field(method_name) define_method(method_name) do |label, *args| @template.content_tag("p" , @template.content_tag("label" , label.to_s.humanize, :for => "#{@object_name}_#{label}") + "
" + super) end end field_helpers.each do |name| create_tagged_field(name) end end

Este código no funciona con Ruby 1.9.1. Devuelve el error de la siguiente manera:

implicit argument passing of super from method defined by define_method() is not supported. Specify all arguments explicitly. (ActionView::TemplateError)

Mi pregunta es: ¿Qué debo cambiar en el código para solucionar esto?

El super anterior pasó todos los parámetros (ver esta pregunta reciente ).

Como indica el mensaje de error, aquí debe “especificar todos los argumentos explícitamente”. Reemplace super por super(label, *args) .

Me encontré con este problema en un método define sin argumentos

 define_method :"#{info_type}_info" do info = super ....... end 

Y todavía encontré este problema. Tuve que poner explícitamente el paréntesis:

 define_method :"#{info_type}_info" do info = super() ....... end