2010-04-03 10 views
11

En "desarrollo web ágil con rieles" (tercera edición) la página 537 - 541 que tiene el código "Forma A Medida" de la siguiente manera:argumento implícito que pasa de súper de método definido por define_method() no es compatible

class TaggedBuilder < ActionView::Helpers::FormBuilder 
    # <p> # <label for="product_description">Description</label><br/> # <%= form.text_area 'description' %> #</p> 
    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}") + "<br/>" + super) 
     end 
    end 
    field_helpers.each do |name| 
     create_tagged_field(name) 
    end 
    end 

Este código no funciona con Ruby 1.9.1. Se 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é debería cambiar en el código de solucionar este problema?

Respuesta

15

El super anterior pasó todos los parámetros (vea este recent question).

Como dice el mensaje de error, debe aquí "especificar todos los argumentos explícitamente". Reemplace super con super(label, *args).

+0

trabajando ahora, gracias! – jaycode

9

me encontré con este problema en un define_method sin argumentos

define_method :"#{info_type}_info" do 

    info = super 
    ....... 

end 

Y aún así encontramos este problema. Tuve que poner explícitamente el paréntesis:

define_method :"#{info_type}_info" do 

    info = super() 
    ....... 

end 
+1

que parece un error en el analizador de ruby ​​para mí. Es posible que desee enviar un informe al equipo central de Ruby. no estoy seguro si es algo que pueden arreglar o no. requerir parens no me parece rubí. :) –

+3

No parece ser un error. Ver [esta pregunta] (http://stackoverflow.com/questions/2570428/constructor-overriding), y [este hilo de formulario] (https://www.ruby-forum.com/topic/146693). –

Cuestiones relacionadas