Неявная передача параметров супер из метода, определенного define_method (), не поддерживается

В "Гибкой веб-разработке с направляющими" (третий выпуск) страница 537 - 541 это имеет "Пользовательские Конструкторы форм" код следующим образом:

  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

Этот код не работает с Ruby 1.9.1. Это возвращает ошибку следующим образом:

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

Мой вопрос: Что я должен изменить в коде для фиксации этого?

12
задан 4 revs, 3 users 68% 23 February 2018 в 14:38
поделиться

1 ответ

super выше передал все параметры (см. Этот недавний вопрос ).

Как указано в сообщении об ошибке, вы должны здесь «явно указать все аргументы». Замените super на super (label, * args) .

17
ответ дан 2 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: